静态成员变量:
属性:顾名思义,静态是关键。这里的静态是指和全局变量一样始终在内存中存在,在编译阶段就已经分配好空间(对象还未创建)。同时这意味着每个对象在使用它的时候是以“共享”的形式,不独属于某个对象。
声明工作:静态成员变量的定义在类内,而初始化需要在类外(不能在局部函数,包括main)。
访问:①通过对象访问 ②通过类名直接访问,两种形式的接口相同。
静态成员函数:
不可以访问普通成员变量,但可以访问静态成员变量。
可以通过类名和对象访问。
有权限管理。
————————————————————————————————————————
单例模式类:
目的:为了让类只有一个实例对象。(实例不需要自己释放)
实现:
事先把默认构造函数和拷贝构造函数私有化。
内部维护一个私有的,唯一的类指针成员(该成员无疑是静态的),在类外通过引用初始化。
提供一个接口来单独、专门访问这个指针成员。
——————————————————————————————————————
类中的成员变量和成员函数分开存储和处理:
每个实例的对象都有一个独一无二的地址,用char类型来维护这个地址。
只有非静态成员变量属于对象,其他都不属于。所以本身类的大小只取决于非静态成员变量大小。
而非静态函数的成员区分则需要this指针的引入。
this指针:特殊的隐含指针,永远指向当前对象,即指向被调用的成员函数所属的对象。
当一个对象被创建后,编译器会在所有对象的成员函数中生成一个隐含指针this,来保存这个对象的地址。this指针不是该对象的一部分,所以不会影响sizeof。如 Person* this。存在于非静态函数中,无需定义,直接使用。显而易见,这个指针充当了桥梁作用,把被调用成员函数和该函数所属对象连接起来。所以this 指针也是C++实现封装的一种机制。*this即该对象实值。
this指针可以解决命名冲突(如形式参数和成员变量的重名)。
__________________________________________________________________
常函数与常对象
对象调用普通函数的形式,默认的this指针为 Person * (const) this <这里的const指不可改变。>
常函数:void showcase() const{ 函数体 }
不允许函数内部修改this指针指向对象的内部属性的值,即默认this指针为 const Person *const this 的形式(后面的const实际上是把this指针const了)。
对应常函数,如果有部分成员属性可以变动,可以加上mutable的前缀修饰。
常对象:const Person p1
不允许修改对象内部的任何属性。因为不允许修改成员属性,编译器也不会允许调用对象内部的函数,因为内部函数可能会破坏只读的特性。但如果此时被调用函数是常函数,编译器就会允许调用。
c++ 函数前面和后面 使用const 的作用:
前面使用const 表示返回值为const
后面加 const表示函数不可以修改class的成员
—————————————————————————————————————
友元函数 friend
应用:访问类的私有属性。
格式:①全局函数作友元函数
friend void show( ) ;
类内写好 有friend 前缀修饰的 函数声明。 然后在全局范围书写函数体。
②类作友元
friend class tense ;
一个类要调用另一个类里的私有属性。被调用类里写好 有friend 前缀修饰的 函数声明。
③成员函数作友元
friend void tense :: show( ) ;
特定的类中成员函数可以作为友元调用该类的私有属性