C++的const类成员函数

原文(C++的const类成员函数)
下面对几个要点做一些补充:
1、C++中const类型的对象只能调用const类型的成员函数。

在下面的代码中,我们在类中声明一个const类型的成员函数,再实例化一个普通类型的MyClass对象A和const类型的MyClass对象B。

class MyClass
{
public:
	MyClass();
	~MyClass();
public:
	void sum()const;
	void add();
private:
	int a;
	mutable int b;
};
int main()
{
	MyClass A;
	MyClass const B;
	A.add();
	A.sum();
	B.add();//IDE会提示错误
	B.sum();
}

VS会在B.add();这一句提示错误。因为我们的add函数是非const类型的,而B是const类型的,所以会出现下面的错误。
在这里插入图片描述
总结一下:const类型的对象只能调用const类型的成员函数。非const类型的对象则没有这个限制,两种类型的成员函数都可以调用。
2、const类型的成员函数无法修改类的成员。

在MyClass类中,我们定义了一个const类型的成员函数sum。

class MyClass
{
public:
	MyClass();
	~MyClass();
public:
	void sum()const;
	void add();
private:
	int a;
	mutable int b;
};

void MyClass::sum() const
{
	a++;//此处VS会提示错误
}


然后在sum将函数中写a++,vs会提示如下错误
在这里插入图片描述
也就是说:const类型的成员函数无法修改类的成员。(此处准确来说应该是无法修改类的非mutable 类型成员,关于mutable的解释请看第3条)

3、对可变数据成员的理解(mutable关键字)
在第二条中说const类型的成员函数无法修改类的成员,这句话其实是不严谨的 ,准确应该是无法修改类的非mutable类型的成员。参照C++primer(5th) P245,如果在类的成员前面加上mutable修饰,那么此时一个const类型的成员函数也可以修改这个成员的值。

class MyClass
{
public:
	MyClass();
	~MyClass();
public:
	void sum()const;
	void add();
private:
	int a;
	mutable int b;
};


MyClass::MyClass()
{
	a = 10;
	b = 20;
}


void MyClass::add()
{
	a++;
	b++;
	std::cout << "a:" << a << std::endl;
	std::cout << "b:" << b << std::endl;
}


void MyClass::sum() const
{
	b++;
	std::cout << b;
}
int main()
{
	MyClass A;
	A.sum();
	A.add();
	
}


在这里插入图片描述
可以看到const类型的sum函数已经修改了mutable 修饰的 b的值。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值