现在的位置: 首页 > 综合 > 正文

关于C++重载赋值运算符”=”的讨论

2013年11月26日 ⁄ 综合 ⁄ 共 614字 ⁄ 字号 评论关闭

原文地址:http://www.vckbase.com/index.php/wv/219

[问题的提出]:

在很多书籍和文章中,很多次提到在对赋值操作符(=)进行重载的时候,要返回对目的(调用)对象实例(*this)的引用。其中不免有这样的论断:一定要返回对调用对象的引用;返回对调用实例对象的引用是为了实现链式连续赋值。

这里说明两个问题:第一,是否重载赋值操作符必须返回对调用对象的引用,第二,是否这样就可以实现链式赋值,而不这样就不行。

首先,必须承认,返回对"*this"的引用是标准的二目操作符重载的格式,效率很高。这样做有很多优点:如实现链式赋值、避免临时对象的产生(调用拷贝构造函数)、销毁(调用析构函数),但不是非这样做不可,下面通过对比来论述返回对"*this"的引用的优点及其他做法的缺点,同时也能清楚第二个问题,我们从例子着手。

01.//
a.h
02.class 
03.{
04.public:
05.A();
06.A(int nTest);
07.A(const A&
a);
08.virtual ~A();
09.A
operator=(
const A&
a);
10.//
A& operator=(const A& a);
11. 
12.private:
13.int m_nTest;
14. 
15.public:
16.void printit();
17.};
18.
19. 
20.//
a.cpp
21.A::A(int nTest)

抱歉!评论已关闭.