this指针
- this指针作用就是指向成员函数所作用的对象。
- 非静态成员函数中可以直接使用
this
来代表指向该函数作用的对象的指针。 - 静态成员函数中不能使用
this
指针。
静态成员 static
- 定义:在定义前面加了
static
关键字的成员。 - 普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。
- 普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象。
- 静态成员不需要通过对象就能访问。
- 如何访问静态成员:
- 类名::成员名。
- 对象名.成员名。
- 指针->成员名。
- 引用.成员名 。
- 静态成员变量本质上是全局变量,即使一个对象都不存在,类的静态成员变量也存在。
- 静态成员函数本质上是全局函数。
- 设置静态成员这种机制的目的是将和某些类紧密相关的全局变量和函数写到类里面,看上去像一个整体,易于维护和理解。
- 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数。
成员对象和封闭类
- 有成员对象的类叫封闭类
- 封闭类对象生成时,先执行所有对象成员的构造函数,然后才执行封闭类的构造函数。
- 对象成员的构造函数调用次序和对象成员在类中的说明次序一致,与它们在成员初始化列表中出现的次序无关。
- 当封闭类的对象消亡时,先执行封闭类的析构函数,然后再执行成员对象的析构函数。次序和构造函数的调用次序相反。
- 封闭类的对象,如果是用默认复制构造函数初始化的,那么它里面包含的成员对象, 也会用复制构造函数初始化。
友元 friends
- 友元函数: 一个类的友元函数可以访问该类的私有成员。
- 友元类:如果A是B的友元类,那么A的成员函数可以访问B的私有成员。
- 友元类之间的关系不能传递,不能继承。
常量成员函数
- 在类的成员函数说明后面可以加
const
关键字,则该成员函数成为常量 成员函数。 - 常量成员函数内部不能改变属性的值,也不能调用非常量成员函数。
- 在定义常量成员函数和声明常量成员函数时都应该使用
const
关键字。 - 如果一个成员函数中没有调用非常量成员函数,也没有修改成员变量的值,那么,最好将其写成常量成员函数。
- 两个函数,名字和参数表都一样,但是一个是
const
,一个不是,算重载。 mutable
成员变量可以在const
成员函数中被修改。