目录
常函数
- const 修饰类成员函数,称为常函数。
- 本质为 const 修饰成员函数中的this指针,让指针指向的值不可修改。
- 常函数可调用类中的属性,但不可以对其值进行修改。
- 可以通过加mutable关键字,使成员属性变为常函数可调用修改的值。
class Person
{
public:
void do_someting() const //在函数末加上cosnt修饰,将成员函数变为常函数。
{
cout << " m_A = " << m_A << endl; //在常函数中可以调用成员属性
this -> m_A = 100; //错,但不可以修改成员属性。
this -> m_B = 100; //可行,如果需要在常函数中修改成员属性,
//那么需要在成员属性前加上mutable关键字加以修饰。
}
void func(){
m_A = 200;
}
int m_A;
mutable int m_B;//加上mutable,使m_B变为特殊属性。
};
常对象
- 在对象前加上const修饰,使得对象的属性不可修改。
- 常对象可以调用类中成员属性,但不可修改成员属性的值。
- 如果需要修改成员属性的值,用mutable关键字修饰该成员属性。
void test01()
{
const Person p1; //在对象前加const关键字,使对象p1成为常对象。
cout << "p1.m_A"<<p1.m_A<<endl;// 常对象可以访问成员属性
p1.m_A = 200; //错,常对象不可以成员属性的值。
p1.m_B = 200;//可行,加上mutable后 m_B变为特殊变量,可由常对象调用修改。
}
注意
- 常对象不可调用类中的普通成员函数,常对象只能调用常函数。
- 因为可能在调用普通函数的过程中修改成员属性。
void test02()
{
const Person p2;
p2.func();//错,因为常对象在嗲用普通成员函数后,由于函数本身内部可能修改属性的值,
//所以通过常对象不可以调用普通的成员函数。
p2.do_something();//常对象可以调用常函数。
}