this指针?const函数?const对象成员?

#include<iostream>
using namespace std;
class Coordinate
{
	public:
	Coordinate()
	{
		
	}
	~Coordinate()
	{
		
	}

	void setNum(int x)
	{
		cout<<"YES"<<endl;
	}
	int getNum()
	{
		return m_iNum;
	}
	private:
		int m_iNum;
};
int main()
{
	const Coordinate coor;
	coor.setNum(3);
}

上面这个代码是会报错的,我们首先分析一下。

首先我们调用了常对象coor的setNum函数

这个函数,因为C++的特性,帮我们省略了一个参数

实际上这个函数应该是

void setNum(Coordinate*this,int x)

这里的this,其实也就是我们实例化出来的对象

这个this,是可读可写的,但是我们如果调用了常对象coor的setNum函数,就相当于传进去了一个只读不可写的this

显然不合规矩。

但是我们如果改变一下

#include<iostream>
using namespace std;
class Coordinate
{
	public:
	Coordinate()
	{
		
	}
	~Coordinate()
	{
		
	}

	void setNum(int x)const
	{
		cout<<"YES"<<endl;
	}
	int getNum()
	{
		return m_iNum;
	}
	private:
		int m_iNum;
};
int main()
{
	Coordinate coor;
	coor.setNum(3);
}
我们用一个普通的对象调用它这个类里面的const函数可不可以呢?

答案是可以的,我感觉这是因为这是一种权限大到权限小的改变

也就是说,我可读可写,所以你限制我变成了只可读,这是可以的。

void setNum(int x)等价于void setNum(Coordinate*this,int x)

void setNum(int x)const等价于void setNum(const Coordinate*this,int x)


还有要注意的是,void setNum(int x)和void setNum(int x)const是互为重载的,也就是说,假如我定义了一个

const Coordinate coor1,

还有

Coordinate coor2

那么我们如果都各自调用setNum这个函数,那么就会分别匹配,coor1会调用void setNum(int x)const,coor2会调用void setNum(int x)

也就是说各找各家,各找各妈吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值