C++面向对象——成员变量与成员函数
概述
1.初始化是赋一个初始值,而定义是分配内存。
2.空类占1字节内存
静态成员变量,静态成员函数,非静态成员函数不在类上,故不算在类所占内存上
3.空指针调用成员函数
空指针可以调用不含调用成员变量的成员函数,调用成员变量的成员函数可以事先判断this是否为空指针
4.成员分为三种:private、protected、public
private可避免成员变量被修改,可在public中设置函数完成对成员变量的赋值。
此时可以在函数中添加对成员变量输入的限制。
此时函数可分为Getter类函数(获取成员变量)与Setter类函数(修改成员变量)。
5.private中的成员变量建议以_开头。
6.private是相对类而言的,同类的对象可以访问该类中的private成员。
7.继承子父类、指针、地址与变量的关系
输出结果:
结论:子类首地址为父类的第一个成员变量的首地址
const成员
1.const函数不可以修改成员属性
2.成员属性声明时加关键字mutable(易变的)后,在const函数中依然可以修改
3.常对象只能调用常函数,若常对象调用非常函数,则会有修改属性的可能(常对象不允许这样做)
常函数在参数列表的右括号后加const
静态成员
1.可以使用static关键字类定义将类成员定义为静态的,默认初始化为0.
2.静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。
如果不加定义就会报错。
3.可以在类的外部通过使用解析运算符::来重新声明静态变量从而完成初始化。
4.静态成员函数可以把函数与类的任何特定对象独立开来。
5.静态成员函数即使在类对象不存在的情况下也能被调用,只要使用类名加范围解析运算符 :: 就可以访问。
6.静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。
若静态成员变量没有在类外声明,则不可以被成员函数调用
7.静态成员函数有一个类范围,他们不能访问类的 this 指针。可以使用静态成员函数来判断类的某些对象是否已被创建。
8.静态成员的用处:清楚了解构造与析构函数的调用情况。
9.类中特殊成员变量的初始化问题:
(1)常量变量:必须通过构造函数参数列表进行初始化。
(2)引用变量:必须通过构造函数参数列表进行初始化。
(3)普通静态变量:要在类外通过"::"初始化。
(4)静态整型常量:可以直接在定义的时候初始化。
(5)静态非整型常量:不能直接在定义的时候初始化。要在类外通过"::"初始化。