为类重载赋值运算符返回引用值是为了连续赋值

C++语言 码拜 8年前 (2016-04-20) 864次浏览
本人想问一下为什么类的重载赋值运算符返回值必须是引用值,之前听说是为了连续赋值?本人不太懂

class A
{
public:
	A(int i){x=new int;*x=i;}
//	A(A&r){x=new int;*x=r.get();}
	~A(){delete x;x=NULL;}
	void set(int i){*x=i;}
	int get(){return *x;}
	A operator=(A&r)
	{
		*x=r.get();
		return *this;
	}
private:
	int *x;
};

PS:不加引用说明符会出现下面warnig:

||=== Build: Debug in oooo (compiler: GNU GCC Compiler) ===|
|In function "int main()":|
|error: no match for "operator=" (operand types are "A" and "A")|
|note: candidate is:|
|note: A A::operator=(A&)|
|note:   no known conversion for argument 1 from "A" to "A&"|
解决方案

40

以下几种情况调用拷贝构造:
1当用类的一个对象初始化该类的另一个对象时.
2 假如函数的形参是类的对象,调用函数时,进行形参和实参结合时.
3 假如函数的返回值是类的对象,函数执行完成返回调用者时.
4、需要产生一个临时类对象时。
题主第一和第二个问题就是上面的第二种和第三种情况
第三个问题,题主在析构函数里打印一下,然后单步调试你就知道了
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为类重载赋值运算符返回引用值是为了连续赋值
喜欢 (0)
[1034331897@qq.com]
分享 (0)