1)类的成员函数包括构造函数,都有一个隐藏的该类类型的指针,名字为 this。
a. 对于普通成员函数,this 指针指向调用该函数的对象。
b. 对于构造函数,this 指针指向正在被构造的对象。
2)在成员函数或构造函数直接访问成员变量实际都是通过 this 指针完成的,一般 this 可以省略不写,也可以显示写出来。
3)需要显示使用 this 指针的场景
a. 区分作用域
b. 从成员函数中返回调用对象的自身 (自引用)
class A{ A& fun(void){ ... return *this; } } int main(){ A a; a.func(); }
c. 从类的内部销毁对象自身(对象自毁)
class A{ void destory(void){ ... delete this; //对象自毁 } } int main(){ A* pa = new A; //delete pa; }
d. 作为函数实参,把一个对象传递给另一个对象,实现对象的交互。
1)在一个普通的成员函数不包括构造函数后面加上 const 关键字,这个成员函数就称为常函数。
返回类型 函数名 (形参表) const {函数体}
2)const 实际修饰的就是成员函数里面隐藏参数 this 指针,常函数中的 this 是一个常指针,不能在常函数中修改成员变量的值。
3)一般如果一个函数不需要修改成员变量的值,就可以定义为常函数,防止意外修改成员变量。
4)被 mutable 关键字修饰的成员变量可以在常函数中修改。
5)非常对象既可以调用非常函数也可以调用常函数,但常对象只能调用常函数,不能调用非常函数。
6)函数名和形参表相同的成员函数,其常版本和非常版本可以构成有效的重载,常对象调用常版本,非常对象调用非常版本。