C++常函数与常对象
const修饰成员函数
1.用const修饰成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中的任何普通成员变量。
2.当成员变量类型前用mutable修饰时可以修改。
class Test
{
public:
Test(int num, int id)
{
this->num = num;
this->id = id;
}
//常函数:函数的()后面加const,该函数为常函数
void print()const
{
//id = 10;//错误常函数不能修改普通的成员变量
//const修饰的时this指针指向的中间中的变量,所以不能修改里面的值
//Test* const this; //this指针
//const Test* const this;//常函数修饰的
s = 10;//前面加mutable关键字修饰的变量可以在常函数中修改
cout << "s = " << s << endl;
}
int num;
int id;
mutable int s;//mutable修饰成员变量
};
const修饰对象
1.常对象只能调用const的成员函数
2.常对象可以访问const修饰的修饰的数据成员,也可访问普通数据成员,但不能修改,除非成员用mutable修饰。
//类与上面定义的相同
class Test
{
public:
Test(int num, int id)
{
this->num = num;
this->id = id;
}
//常函数:函数的()后面加const,该函数为常函数
void print()const
{
//id = 10;//错误常函数不能修改普通的成员变量
//const修饰的时this指针指向的中间中的变量,所以不能修改里面的值
//Test* const this; //this指针
//const Test* const this;//常函数修饰的
s = 10;//前面加mutable关键字修饰的变量可以在常函数中修改
cout << "s = " << s << endl;
}
int num;
int id;
mutable int s;//mutable修饰成员变量
};
//************************************************
int main()
{
//在数据类型前面加const,让对象成为常对象
const Test t(1,1);//常对象
//t.num = 10;//常对象不能改变普通的成员变量的值
//t.id = 10;//也是错误的
t.print();//常函数可以调用常对象
t.s = 100;//常对象可以修改mutable修饰的成员变量
Test t1(2,2);
t1.print();//普通函数也可以调用常函数
}
总结
1.常函数的括号后面加const关键字,这个函数就是常函数
2.常函数不能修改普通成员变量
3.const修饰的是this指针指向的空间的变量,所以不能改变
4.只有mutable修饰的成员变量在常函数中可以修改
5.在实例化对象时加上const,让对象变为常对象
6.常对象可以调用常函数
7.常对象可以修改mutable修饰的成员变量
8.普通对象也可以调用常函数