目录
常函数:
概念:成员函数后加const后,我们称这个函数为常函数。
注意:1、常函数内不可以修改成员属性;
2、成员属性声明时加关键字mutable后,在常函数中依然可以修改,常函数也可以修改。
常对象:
概念:声明对象前加const称该对象为常对象。
注意:常对象只能调用常函数。
例1:常函数
#include<iostream>
using namespace std;
class person
{
public:
void show()const
{
m_A = 100;
}
int m_A;
};
int main()
{
person p;
p.show();
system("pause");
return 0;
}
第7行报错,因为m_A其实为this->m_A,this指针的本质是指针常量,指向是不可改的,包括this=NULL也是不行的。
不加const,this的本意:person* const this,不可以改this的指向,可以改指向的变量的值。
第7行加const,this的本意:const person* const this,不可以修改this的指向,也不可以修改指向的变量的值。
要变成可修改的值,需要把第11行改为mutable int m_A;
例2:常对象
#include<iostream>
using namespace std;
class person
{
public:
void show()const
{
this->m_B = 100;
}
int m_A;
mutable int m_B;
};
int main()
{
const person p//在对象前加const,变常对象
p.m_A = 100;//报错
p.m_B = 100;//正确
system("pause");
return 0;
}
第18行报错的原因如上例所说,常对象的常函数值也不可以修改,要加mutable
例3:
#include<iostream>
using namespace std;
class person
{
public:
void show()
{ }
};
int main()
{
const person p//在对象前加const,变常对象
p.show();
system("pause");
return 0;
}
第14行报错,因为常对象只能调用常函数,而show()不是常函数