常函数:
- 成员函数后加const后我们称为这个函数为常函数。
- 常函数内不可以修改成员属性(本身this是指针常量,再加一个const,那就连值都不能修改)。
- 成员属性声明时加关键字mutable后,在常函数中依然可以修改。
this指针指向被调用的成员函数所属的对象
this指针是隐含每一个非静态成员函数内的一种指针
this指针的本质, 是指针常量,指针的指向不可以改变
void showPerson()
{
this->m_A = 10; // Person* const this == this,这是指针常量,所以下面错误
this = NULL; //this指针的指向不可以修改
}
void showPerson01() const
{
this->m_A = 10//const Person* const this == this,所以连指针指向的值也不可修改
}
在属性前加上mutable,则指针指向的值可以修改
常对象:
在对象前加const, 变为常对象(不能修改成员变量)
常对象只能调用常函数,不可以调用普通成员函数,因为普通成员函数可以修改属性
空指针调用成员函数
空指针是可以调用成员函数的
但是如果成员函数不能调用成员属性,因为成员属性默认有个this->m_A指针,this指向生成的对象及空指针。
class Person
{
public:
void showClassName()
{
cout << "this is class name" << endl;
}
void showPersonAge()
{
if (this == NULL)
{
return;
}
cout << "age = " << this->m_Age << endl;
}
int m_Age;
};
void test01()
{
Person* p = NULL;
p->showClassName();
p->showPersonAge(); //会报错
}