类的特殊成员
指针常量:指针的指向不能变 int * const ptr;
常量指针:指针指向的值不能改变 const int *ptr;
this 指针本质是一个指针常量, 指向当前对象,且不能更改指向
导学: const 修饰的是 this 指针,限制了函数中通过this指针修改成员变量的能力使 this 指针变为了,一个常量指针常量。
-
常量成员
- 类中的成员在声明时用了 const 修饰的成员
- 分类
- 常量数据成员: const 类型 变量名;
- 常量函数成员:类型 函数名()const;
- 常量函数成员不能调用非常量函数成员
- 特征
- 常量数据成员在定义时不能被赋值,只能通过构造函数的成员初始化列表来初始化
- 一旦对象被创建,常量数据成员就不能被修改了
- 常量函数成员只有读取普通成员变量的权限,没有修改的权限
- 定义常量函数成员时:返回值类型 函数名(形参表)const {}
- 在函数实现部分也要加 const
-
静态成员
-
无需创建对象就能使用的成员
-
用static修饰的成员
-
分类
-
静态数据成员—static 类型 变量名
- 类型 类名::静态数据成员 = 初始值
-
静态函数成员—static 类型 函数名(形参表);
- 在.cpp文件中定义时不用 + static修饰,否则会报错
-
-
特征
- 静态成员为类的所有对象共享,不管有多少对象,静态成员只有一份存于内存中
- 类的内存大小为所有非静态成员变量的和
- 在类中声明的静态数据成员属于引用性说明,必须在类的外部初始化它(且仅能说明一次)
- 类型 类名::静态数据成员 = 初始值;
- 静态成员函数(非静态成员函数),静态数据成员(非静态数据成员)的关系
- 静态成员为类的所有对象共享,不管有多少对象,静态成员只有一份存于内存中
-
静态成员的访问方法
- 通过对象访问-----对象名.成员名
- 通过类名访问-----类名::成员名(无需创建对象)
-
静态与非静态的关系
-
static 的5种用法
-
- 静态局部变量
- 在函数或块的内部说明的静态变量
- 它的作用域仅局限于函数或块
- 生命期-与整个程序的执行期相同
- 静态局部变量
-
- 静态全局变量
- 在所有函数的外部定义
- 作用域仅在当前文件
- 生命期-与整个程序的执行期相同
- 静态全局变量
-
- 具有静态数据成员
- 只能在本文件的内部被调用
- 其他文件中均不可见
- 具有静态数据成员
-
- 类的静态数据成员
- static 修饰的数据成员
- 为该类所有对象共有
- 类的静态数据成员
-
- 类的静态函数成员
- static修饰的函数成员
- 类的静态函数成员没有this指针,不能用const修饰
- 通常只在其中处理类的静态数据成员值
- 类的静态函数成员
-
-