首先明确:
- 常函数不能修改成员变量(可以调用,不能修改)
- 想要修改成员变量,必须在成员变量前加mutable关键字
- 常对象只能调用常函数,但是普通对象既可以调用普通函数也可以调用常函数
class car
{
public:
//常函数的const加在大括号之前,本意是在普通函数的this指针前加const,
//形成const car* const c这样的结构,及不可以更改指针的地址,也不可以改指针指向的值
car(string name)
{
this->name=name;
}
void changeName(string name) const
{
this->name=name;
}
void showName()
{
class="superseo">cout<<this->name<<endl;
}
private:
mutable string name;
};
car c("BWM");
c.changeName("wuLin");//正确,普通对象依然可以调用常函数
c.showName();
const car c2("DaBen");
c2.changeName("wuLin");
//c2.showName();常对象不能调用普通函数
常对象的成员变量都不允许修改,但是当普通函数里面有修改普通成员变量的时候,调用的话成员变量属性被修改,这和常对象的定义产生冲突了,所以常对象只能调用常函数
但是,常函数可以调用普通对象吗,还是只能调用常函数呢???
//若成员变量这样定义,Kinds是一个类
mutable Kinds k;
//常函数如下
void change(Kinds &k) const
{
this->k.name=k.name;
}
需要注意,常函数的本意是让this指针指向的值也不能改变,故随可以调用普通对象,
//但是不能修改this指针指向的本对象的值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)