常函数:
- 成员函数后加const后,我们称这个函数为常函数。
- 常函数内不可以修改成员属性
- 成员属性声明时加关键字mutable后,在常函数中依然可以修改
常对象:
- 声明对象前加const称该对象为常对象
- 常对象只能调用常函数
#include<iostream>
using namespace std;
class Person {
public:
void showPerson() const //对,你没看错,就是加在这。
//void showPerson() 这样可以修改m_A
此时这个函数不可修改m_A的值:因为this指针的原因,因为const加在函数最前面不合适吧,最前面时函数名,所以加在尾部,实际可以看作在最前
void showPerson() const { //this指针的值也不可修改 因为实际上是const Person* const this;指针常量前再加了一个const
this->m_B = 100;
}
void func() {
m_A = 100;
}
int m_A;
mutable int m_B; //此时不会报错,需要加关键字mutable
};
void test01() {
const Person p;
//p.m_A = 100;会报错的
p.m_B = 100; //不会报错,在常对象下也可修改,mutable可理解为有钥匙的人
p.showPerson();//能调用常函数是因为,常函数不会修改属性值,符合常对象不修改属性值的这一特点
//p.func(); //常函数不可调用,因为我们在类内函数中可以修改m_A的值,若可以调用的话,说明常对象可以用这个函数修改属性值了
}
int main() {
test01();
return 0;
}