C++ const对成员函数的修饰 及 取地址及const取地址操作符重载

const对成员函数的修饰

将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this 指针,表明在该成员函数中不能对类的任何成员进行修改。

格式为 void menberFun() const
因为this指针是隐含的,我们无法在this指针前添加const,所以我们只能在函数后面加const

class A
{
public:
	void setA(int a) //this : A* const 指向不能改变
	{
		_a = a;
	}

	int getA() const // this : const A* const 指向和内容都不能改变
	{
		_a = 10;
		return _a;
	}

private:
	int _a;
};

被const修饰后的this指针,指向的对象的属性值不能被改变
在这里插入图片描述
下面我们来更加深刻的理解在类中const的用法:
我们必须先了解:对象的权限(可读可写)可以缩小,但是不能被放大。
前两问类代码:

class A
{
public:
	void setA(int a) //this : A* const 指向不能改变
	{
		_a = a;
	}

	int getA() const // this : const A* const 指向和内容都不能改变
	{
		return _a;
	}

private:
	int _a;
};

1、const对象可以调用非const成员函数吗?
在这里插入图片描述
不可以,被const修饰后的对象的属性值不能被修改,而setA函数 是可以修改对象的方法,权限放大,所以不可以
2、非const对象可以调用const函数吗?
在这里插入图片描述
可以,这里getA函数的this指针是被const修饰的,而我对象是非const,从可读可写变成只读,属于权限缩小,可以被接受,所以是可以的

后两问类代码:

class A
{
public:
	void setA(int a) 
	{
		_a = a;
		getA(); //调用const修饰的成员函数
	}

	int getA() const 
	{
		setA(); //调用非const的成员函数
		return _a;
	}

private:
	int _a;
};

3、const成员函数内可以调用其它的非const成员函数吗
在这里插入图片描述
不可以,在getA函数中this是const修饰的,权限为只读,而在该函数中调用了另一个非const的成员函数,权限为可读可写,此时权限放大,所以不可以
4、非const成员函数内可以调用其它的const成员函数吗
在这里插入图片描述
可以,从可读可写变为只读,权限缩小,可以被接受,所以可以

取地址及const取地址操作符重载

这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比 如想让别人获取到指定的内容!

class A
{
public:
	//取地址操作符重载
	A* operator&() 
	{
		return this;
	}
	//const取地址操作符重载
	const A* operator&() const
	{
		return this;
	}
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WhiteShirtI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值