C++(常函数、常对象)

本文探讨了C++中的常函数和常对象。常函数不允许修改成员变量,除非使用mutable关键字。常对象只能调用常函数,以防止其成员变量被修改,避免与常对象的定义冲突。那么,常函数能否调用普通对象或只限于调用常函数呢?这是一个值得深入研究的问题。

常函数、常对象

首先明确:

  1. 常函数不能修改成员变量(可以调用,不能修改)
  2. 想要修改成员变量,必须在成员变量前加mutable关键字
  3. 常对象只能调用常函数,但是普通对象既可以调用普通函数也可以调用常函数
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()
		{
			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指针指向的本对象的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值