当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .