<b>为什么要在operator=中返回"*this"的引用</b>[VC/C++编程]
本文“<b>为什么要在operator=中返回"*this"的引用</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
[问题的提出]:
在很多书籍和文章中,很多次提到在对赋值操作符(=)举行重载的时刻,要返回对目的(调用)对象实例(*this)的引用.此中不免有这样的结论:一定要返回对调用对象的引用;返回对调用实例对象的引用是为了实现链式持续赋值.
这里阐明两个问题:第一,能否重载赋值操作符必须返回对调用对象的引用,第二,能否这样便可以实现链式赋值,而不这样就不行.
首先,必须承认,返回对"*this"的引用是尺度的二目操作符重载的格局,效率很高.这样做有很多长处:照实现链式赋值、避免暂时对象的产生(调用拷贝构造函数)、销毁(调用析构函数),但不是非这样做不可,下面通过比较来阐述返回对"*this"的引用的长处及其他做法的缺陷,同时也能清楚第二个问题,我们从例子着手.
// a.h
class 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.cpp
A::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;
}
以上是“<b>为什么要在operator=中返回"*this"的引用</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |