第十一章 静态成员和友元
11.1 静态成员
1.C++类当中的静态数据成员仍借用保留字static,但是与之前的静态全局变量,静态局部变量以及静态函数没有关系。
2.静态数据成员不占用具体对象的数据空间。
3.静态数据成员的创建和销毁处分权不属于任何对象。对象有权利读和写静态成员。静态成员应该在创建任何具体对象之前就可以访问,所以要求静态成员在创建类的任何对象
之前就要存在(犹如全局变量、全局对象在main函数前面执行一样)因此静态数据成员应该在主函数之前先定义初始化。
4.静态数据成员不能没有定义也不能不定义。应该将类的静态数据成员定义和初始化语句放在类的内部实现源文件当中。
格式为: 数据类型 类名::静态数据成员名=初始化值;
或者: 数据类型 类名::静态数据成员名(初始化值); (在这里不能再写保留字static)
5.静态数据成员的生命期是全局的,与是否创建了对象没有关系。
6.要访问静态数据成员的时候,可以用对象访问也更一般是用类名访问。
对象名.静态数据成员名
类名::静态数据成员名
7.静态成员函数的声明语法格式: static 返回类型 静态成员函数名(形式参数表)在类体外定义的时候不能添加保留字static!
8.静态成员函数可以被该类所有对象所使用,但是注意静态成员函数没有隐含传递所谓的“本对象地址”的指针形式参数this,只能显式地传递对象作为参数。
11.2友元
1.友元不是类的成员。
2.友元分为友元类和友元函数。
3.友元函数在类声明当中就在前面加一个friend表示函数不是本类成员,而是本类的友元函数。
4.友元函数在处理具体对象的时候需要将对象显式地传递给函数。
4.友元类:声明一个类是另一个类的友元,成为友元类。友元类当中的所有成员函数都是本类的友元函数,都能够访问本类中的所有成员。