当前位置: 首页 > news >正文

[C++入门]类和对象下

这一篇我们对类和对象进行一下收尾工作。

目录

一、初始化列表

 1、与构造函数的对比

2、注意事项

二,Static函数

1、概念

2、特点

3、static成员函数

特点

 三、友元函数

1、概念

2、特点


一、初始化列表

 1、与构造函数的对比

说到初始化列表我们很难不联想到构造函数,这里我们一起回顾一下构造函数的特点

  1. 与类同名

  2. 没有返回类型

  3. 可以重载(一个类可以有多个构造函数)

  4. 可以是public、protected或private

  5. 如果没有显式定义,编译器会生成默认构造函数

 既然有了构造函数,为什么还要有初始化列表呢?

  1. 执行顺序

    • 初始化列表的执行先于构造函数体

    • 成员变量的初始化顺序取决于它们在类中的声明顺序,而非初始化列表中的顺序

  2. 必须使用初始化列表的情况

    • 初始化const成员

    • 初始化引用成员

    • 初始化没有默认构造函数的类类型成员

    • 初始化基类(在继承中)

这里我们进行简单举例
class Example {public:Example(int a, int b, AnotherClass& o) : c(a), ref(b), obj(o) {}
private:const int c;int& ref;AnotherClass obj; 
};

对于以上这些情况,我们就必须使用初始化列表

同时,使用初始化列表可以直接初始化对象,省去了调用初始化再赋值的过程

2、注意事项

1、初始化顺序:成员变量的初始化顺序是它们在类中声明的顺序,与初始化列表中的顺序无关

如下所示,我们想的是想把x赋值给b,再把b赋值给a。但是由于顺序的问题,a先进行定义,就会报错        

class Order {int a;int b;
public:Order(int x) : b(x), a(b) {} 
};

2、默认参数:构造函数可以有默认参数,与初始化列表结合使用

class Box {int l, w, h;
public:Box(int length = 1, int width = 1, int height = 1) : l(length), w(width), h(height) {}
};

二,Static函数

static是C++中一个重要的关键字,当应用于类的成员时,它会改变成员的行为和生命周期。下面我会为大家慢慢介绍

1、概念

        static成员变量属于类本身,而不是类的某个特定对象。所有该类的对象共享同一个static成员变量。

2、特点

  • 在内存中只有一份拷贝

  • 必须在类外进行定义和初始化

  • 不依赖于任何对象存在,可以通过类名直接访问

  • 生命周期与程序相同

class Counter {
public:Counter() { count++; } ~Counter() { count--; } static int count;     
};int Counter::count = 0;     int main() {Counter c1;cout << "当前对象数: " << Counter::count << endl; {Counter c2;cout << "当前对象数: " << Counter::count << endl; } cout << "当前对象数: " << Counter::count << endl; return 0;
}

这个结果中c2在除了作用域后就被销毁掉了,所以count在main中括号结束后随着c2的销毁就变成了1

3、static成员函数

static成员函数属于类本身,而不是类的某个特定对象。它只能访问类的static成员变量和其他static成员函数。

特点

  • 不依赖于任何对象存在,可以通过类名直接调用

  • 没有this指针

  • 不能访问类的非static成员

让我们通过一段代码演示一下

class MathUtils {
public:static double add(double a, double b) {return a + b;}static double multiply(double a, double b) {return a * b;}static double getPi() {return pi;}private:static constexpr double pi = 3.141592653589793;
};int main() {cout << "5 + 3 = " << MathUtils::add(5, 3) << endl;cout << "5 * 3 = " << MathUtils::multiply(5, 3) << endl;cout << "π的值: " << MathUtils::getPi() << endl;return 0;
}

 三、友元函数

1、概念

友元函数(friend function)是C++中一种特殊的函数,它可以访问类的私有(private)和保护(protected)成员,即使它不是该类的成员函数。

2、特点

  • 不是类的成员函数,但可以访问类的私有和保护成员

  • 在类内部声明,使用friend关键字

  • 不受类的访问控制限制(public/private/protected)

  • 没有this指针,因为它不是成员函数

  • 可以定义在类的任何部分(public/private/protected)

那么什么时候我们要使用友元函数呢? 

比方说,为了提高某个函数的访问权限,或者一些要访问多个类私有成员的函数,我们就要用到友元函数,提高访问权限

举个例子吧

#include <iostream>
using namespace std;class Box {
private:double width;public:Box(double w) : width(w) {}friend void printWidth(Box box);
};void printWidth(Box box) {cout << "Box的宽度: " << box.width << endl;
}int main() {Box box(10.0);printWidth(box); return 0;
}

而当屏蔽掉声明之后,就无法访问了

http://www.xdnf.cn/news/573355.html

相关文章:

  • 东莞一锂离子电池公司IPO终止,客户与供应商重叠,社保缴纳情况引疑
  • GitLab 配置 webhook
  • 越小越优先和越大越优先
  • oracle使用SPM控制执行计划
  • 使用Redis的Bitmap实现了签到功能
  • iPaaS集成平台技术选型关注哪些指标?
  • HJ20 密码验证合格程序【牛客网】
  • 测试W5500的第4步_使用ioLibrary库创建UDP客户端和服务器端
  • 数据结构核心知识总结:从基础到应用
  • 6-码蹄集600题基础python篇
  • Mysql数据库相关命令及操作
  • 链表-两两交换链表中的节点
  • Mysql差异备份与恢复
  • Python图像处理全攻略:从基础到前沿技术深度剖析
  • 极大似然估计与机器学习
  • python查询elasticsearch 获取指定字段的值的list
  • 操作系统期末复习(一)
  • 淘宝扭蛋机小程序开发:开启电商娱乐新玩法
  • 工程项目交付质量低?如何构建标准化管理体系?
  • C++网络编程入门学习(四)-- GDB 调试 学习 笔记
  • 第9.1讲、Tiny Encoder Transformer:极简文本分类与注意力可视化实战
  • 计算机操作系统(十)调度的概念与层次,进程调度的时机与进程的调度方式
  • LVLM-AFAH论文精读
  • GitHub SSH Key 配置详细教程(适合初学者,Windows版)-学习记录4
  • CESM2.0 全流程解析:从环境搭建到多模块耦合模拟
  • 打开小程序提示请求失败(小程序页面空白)
  • Python实现蛋白质结构RMSD计算
  • RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!
  • Android Framework开发环境搭建
  • 【Linux庖换现象丁解牛】—进程程序替换!