为什么要在operator=中返回*this的引用,为什么要在operator=中返回*this的引用
【 tulaoshi.com - C语言心得技巧 】
为什么要在operator=中返回"*this"的引用
作者:康建东
下载本文示例代码
[问题的提出]:
在很多书籍和文章中,很多次提到在对赋值操作符(=)进行重载的时候,要返回对目的(调用)对象实例(*this)的引用。其中不免有这样的论断:一定要返回对调用对象的引用;返回对调用实例对象的引用是为了实现链式连续赋值。
这里说明两个问题:第一,是否重载赋值操作符必须返回对调用对象的引用,第二,是否这样就可以实现链式赋值,而不这样就不行。
首先,必须承认,返回对"*this"的引用是标准的二目操作符重载的格式,效率很高。这样做有很多优点:如实现链式赋值、避免临时对象的产生(调用拷贝构造函数)、销毁(调用析构函数),但不是非这样做不可,下面通过对比来论述返回对"*this"的引用的优点及其他做法的缺点,同时也能清楚第二个问题,我们从例子着手。
// a.hclass A {public:A();A(int nTest);A(const A& a);virtual ~A();A operator=(const A& a);// A& operator=(const A& a);private:int m_nTest;public:void printit();};}// a.cppA::A(int nTest){m_nTest = nTest;cout << "constructor A Value is executed now!" << endl;}A::A(const A& a){this->m_nTest = a.m_nTest;cout << "Copy constructor A is executed now!" << endl;}A::A(){cout << "constructor A Default is executed now!" << endl;}A::~A(){cout << "Destructor A is executed now!" << endl;}A A::operator=(const A& a)// A& A::operator=(const A& a){if (this==&a) return *this;this->m_nTest = a.m_nTest;cout << "Assignment A is executed now!" << endl;return *this;}在main()函数中调用
A a(100),b(99),c(98);a = b = c;a.printit();b.printit();c.printit();结果为:
[2] 在赋值函数为:A& operator=(const A& a)的情况下
不同的是没有临时对象的产生,因为operator=返回的是对当前对象的引用,而引用只是别名,而不是构造新
来源:http://www.tulaoshi.com/n/20160129/1485592.html
看过《为什么要在operator=中返回*this的引用》的人还看了以下文章 更多>>