1、const修饰成员函数
用const修饰的成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中的任何普通成员变量, 当成员变量类型符前用mutable修饰时例外
int myFun(void) const //const修饰的是成员函数
{}//函数内部不能修改 普通成员变量 mutable修饰时例外
class Data
{
private:
int data;
mutable int num;
public:
//遍历 成员的函数 不会去修改成员的值
//如果函数不会更改成员数据 就让编译器知道 这是一个const函数
void myPrintData(void) const
{
//data =10000;//err const修饰函数 函数不能操作普通成员变量
cout<<this->data<<endl;
//cout<<data<<endl;
//mutable修饰的成员变量 可以修改
num = 200;
}
Data()
{
cout<<"无参构造"<<endl;
}
Data(int data)
{
this->data =data;
cout<<"有参构造"<<endl;
}
Data(const Data &ob)
{
this->data = ob.data;
cout<<"拷贝构造"<<endl;
}
~Data()
{
cout<<"析构函数"<<endl;
}
};
void test02()
{
Data ob1(100);
ob1.myPrintData();
}
2、const修饰对象 叫常对象
const int num = 10;//系统不会给num开辟空间 num被放入符号表中 如果后期对&num 这时系统才会给num开辟空间
class Data
{
private:
int data;
mutable int num;
public:
//遍历 成员的函数 不会去修改成员的值
//如果函数不会更改成员数据 就让编译器知道 这是一个const函数
void myPrintData(void) const
{
//data =10000;//err const修饰函数 函数不能操作普通成员变量
cout<<this->data<<endl;
//cout<<data<<endl;
//mutable修饰的成员变量 可以修改
num = 200;
}
//编译器认为 普通成员函数 存在修改成员变量 可能
void setData(int data) const
{
//this->data = data;
return;
}
Data()
{
cout<<"无参构造"<<endl;
}
Data(int data)
{
this->data =data;
cout<<"有参构造"<<endl;
}
Data(const Data &ob)
{
this->data = ob.data;
cout<<"拷贝构造"<<endl;
}
~Data()
{
cout<<"析构函数"<<endl;
}
};
void test03()
{
//常对象
const Data ob1(200);
//常对象 只能调用const修饰的函数 遍历成员数据
ob1.setData(20000);
ob1.myPrintData();
}
运行结果: