当前位置:   article > 正文

C++ const对成员函数的修饰 及 取地址及const取地址操作符重载_参数为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;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

被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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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;
	}
};

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/608156
推荐阅读
相关标签
  

闽ICP备14008679号