导图社区 C++—类成员进阶
这是一篇关于第七课——类成员进阶的思维导图,主要内容包括:静态成员函数,静态成员属性,隐藏this指针,类的对象大小。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
第七课——类成员进阶
类的对象大小
类中无属性无函数(空类)时,对象空间大小为1,起到占位作用
类中仅有属性时,空类时的大小1则不计入,对象空间大小仅计算成员属性的大小
所属:类中有属性有函数时,对象空间大小则为属性空间大小。因为函数是属于类。而非属于对象的,一个类定义出的多个对象共用一个函数,在编译期存在
如何证明:通过&test.fun和CTest::fun,观察函数地址
隐藏this指针
存疑:既然类中函数只有一个,那么在main函数中如何通过调用不同对象中的成员函数得到不同的输出结果?
原理:类中成员函数()中有隐含的this指针,形如void fun(CTest* const this),this指针会指向不同的对象,通过this指针使调用函数时可以访问到不同的对象
实现过程:main中通过对象调用函数时,test1.fun(),test2.fun(),会自动传入test1,test2的地址,得到void fun(&teat1),void fun(&teat2),即可得到不同结果
可以直接使用this->调用函数
特性:仅类中非静态成员函数有this指针,在类外一般函数写为void fun(CTest *const p)可达到同样的调用逻辑
静态成员属性
定义格式:在类的属性定义时,形如static int a;
初始化格式:在类外,全局中,属性类型 类类型::变量名;,形如int CTest::a=10;(不需要加上static,这属于附加属性类型) 不能在构造函数中初始化,在构造函数中的称为赋值,而非初始化
所属:通过访问对象空间大小,可得知静态成员属性不属于对象,而是属于类中,编译期存在。
调用方式:类名::静态成员属性 CTest::a; 对象名.静态成员属性 test1.a;
作用:可以使多个对象之间进行交互,进行互通,例如用于统计同一类创建的对象个数。
静态成员函数
调用方式:类名::静态成员函数 CTest::fun(); 对象名.静态成员函数 test1.fun();
特性:由于在静态函数中无法调用一般的成员属性,可得知静态成员函数无this指针,但静态成员属性可正常调用。
实例运用:在构造函数中写入++a(a为静态成员属性),在析构函数中写入--a;再通过静态成员函数显示静态成员属性,即可得知对象数量