静态成员、友元和常类型
静态成员
静态成员数据成员 用static声明
被该类所有对象共享,静态数据成员具有静态生存期
必须在类外定义和初始化,用::指明所属的类,不能用构造函数初始化。
类外引用: 可通过 类名::静态成员数据 或 对象.静态成员数据
公共静态数据成员——可被类外部访问
私有和保护静态数据成员——只能类内访问
初始化 数据类型类名::静态数据成员=初值;
静态成员函数 属于整个类,不属于类的任何对象 处理静态数据成员(最好不访问非静态成员)
无this指针
调用: 类名::静态成员函数
访问非静态成员,要用对象
私有或保护型的静态成员数据,只能在被类内的静态成员函数或成员函数访问;
公有静态成员数据:可在类外用 类名::静态成员 或 对象.静态成员 访问
友元
类的友元 C++提供的一种破坏数据封装和数据隐藏的机制。
友元可以是函数、类、模块
1.友元函数 增加灵活性 必须 对象名.成员
类声明中friend修饰的非成员函数(不是类里的,所以类外定义时没有类名::),在其函数体中能够通过对象名访问私有和保护成员。
2.友元类 classB{
friendclass A; //A 所有成员函数均为B的友元函数
// A 的成员可以访问B的私有成员
}
友元关系不可以被继承。
友元关系是单向的。
友元关系不能传递。
常类型
常类型: 不能更新
常对象: const 类名 对象名
类名 const 对象名 必须初始化,不能被更新
只能调用常成员函数,可访问常数据成员,但不可修改
常成员: const修饰
可被常或非常成员函数引用 常数据成员 const 类型 数据成员(变量名)
可以引用常或非常数据成员 常函数成员 类型 函数名(参数表)const
常数据成员不能在构造函数中初始化,常成员函数不能调用非常成员函数
数据成员 | 普通成员函数 | const成员函数 |
普通数据成员 | 可引用,也可以改变值 | 可引用,但不可改变值 |
const数据成员 | 可引用,但不可改变值 | 可引用,但不可改变值 |
const对象 | 不允许 | 可引用,但不可改变值 |
常引用: const 类型 &引用名 被引用对象不能更新
• 经常使用常指针和常引用做函数参数。既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝,可提高程序运行效率。
常数组: 类型 const 数组名[大小] 数组元素不能更新
常指针: 指向常量的指针