神奇的c++等号重载

今天看Effective C++ 说道等号重载的事,心里一直有疑惑,这些运算符重载都是怎么实现的。在学C++的时候只是草草的看过这部分内容,没有真正自己使用过,对于等号如何操作私有成员一直有疑问,今天试了一下,哎,还真对得起咱这张脸。。。

#include <iostream>


class A
{
public:
	A(void) : mVal(0)
	{

	}
	A(int v) : mVal(v)
	{

	}

	A(const A &obj)
	{
		mVal = obj.mVal;
	}

	~A(void){}

	A& operator = (const A& R)
	{
		mVal = R.mVal;

		return *this;
	}

	void equal(const A &R)
	{
		mVal = R.mVal;
	}

	void set(int v)
	{
		mVal = v;
	}

	int get(void)
	{
		return mVal;
	}

private:
	int mVal;
};


int main(void)
{
	std::cout<<"Hello assign operator"<<std::endl;

	A obj1(1);
	A obj2(2);

	std::cout<<"The value of obj1 is "<<obj1.get()<<std::endl;
	std::cout<<"The value of obj2 is "<<obj2.get()<<std::endl;

	std::cout<<"Do assignment"<<std::endl;
	obj2 = obj1;
	std::cout<<"The value of obj2 is "<<obj2.get()<<std::endl;

	std::cout<<"Test copy constructor"<<std::endl;
	A obj3(obj2);
	std::cout<<"The value of obj3 is "<<obj3.get()<<std::endl;

	std::cout<<"Test equal method"<<std::endl;
	A obj4(4);
	obj4.equal(obj1);
	std::cout<<"The value of obj4 is "<<obj4.get()<<std::endl;

	return 0;
}

 

原来等号可以直接操作私有成员大笑

事实上,复制构造函数也可以操作私有成员。。。。。

 

我弱爆了。。。尴尬

 

事实上,只要参数类型是自身的类型,就可以操作私有成员。。

 

下面是程序的输出

Hello assign operator
The value of obj1 is 1
The value of obj2 is 2
Do assignment
The value of obj2 is 1
Test copy constructor
The value of obj3 is 1
Test equal method
The value of obj4 is 1

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值