Make Www.Edu-cn.Com Your Home Page!
用户名: 密码: 验证码: 注册
  当前位置: > 中国教程网>软件开发>vc> 为什么operator=操作符返回引用

为什么operator=操作符返回引用

作者:   来源:中国教程网   点击:   日期:2007-04-02

为什么operator=操作符返回引用

赵湘宁

问题:
       MSDN文档中解释到:operator=操作符缺省情况下返回引用——
TYPE& TYPE::operator=(const TYPE&)
为什么呢?我对此的理解是:“=”是个二进制操作符。其传入的参数是引用对象,而其它的参数是类实例,“=”在这个类实例中被重载。而我在实际应用中可以不用返回任何类型(void)来实现赋值操作符,并仍然可以完成赋值操作。我这样做正确吗?如果不正确,那么为什么缺省的实现返回引用呢?
解答:
    如果你再花点时间想一想可能就会有答案。其实很简单。operator=返回引用的理由是使你能在一个语句中连接多个赋值。 edu-cn.com
TYPE a,b,c,d;

a = b = c = d;

编译器是象这样解释前面一行的:

a = (b = (c = d));

在编译过程中,赋值是右结合的。说白了就是如果你想要玩一下多个赋值,operator=返回的东西必须是右(rhs)赋值。除了返回对对象自身的引用还能有什么呢?这就是为什么operator=最后一行总是返回对this的引用:
CMyClass& CMyClass::operator=(const CMyClass& rhs) {
...... 
// do the 
// assignment
return *this;
};

rhs参数被声明为常量的话,就允许常量对象的赋值。没有理由不允许。为什么operator=要返回非常量引用呢?所以不管在哪里你都能使用赋值语句对TYPE进行引用:
void MyFunc(TYPE& a);
...
TYPE a,b;
MyFunc(a=b); // 赋值以后传递

由于operator=返回非常量,你甚至可以使用圆括弧重载通常的等号结合率:
TYPE a,b,c;
(a = b) = c;

图一是简单的示例。并有一个问答题:当你完成并运行FOO时,它的输出是什么?
如果你想要学习更多的关于赋值操作的内容,我强烈推荐一本《Effective 》作者是Scott Meyers。本由Addison Wesley Longman, 1997出版。

中国论文网






中国论文网

www.edu4u.com.cn



文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   最新文章:
·static_cast揭密(04-02)
·泛型编程-转移构造函数(Generic Prog(04-02)
·使用MFC的数组类(04-02)
·浅析VC与MATLAB联合编程(04-02)
·精通VC与MATLAB联合编程——综合举例(04-02)
·精通VC与Matlab联合编程(五)(04-02)
·精通 VC 与 MATLAB 联合编程——综合(04-02)
·在VC资源文件中加入声音资源(04-02)
·const传奇(04-02)
·初始化类对象(04-02)
   相关文章:
·自制性能测试类 ·单实例设计模式的实现
·在名字空间中声明类和成员函数 ·初始化类对象
·定义函数对象 ·C++编程杂谈之三:面向对象(续)
·声明函数指针并实现回调 ·C++编程杂谈之二:面向对象
·如何用编程获取CD-ROM的驱动器盘符? ·C++编程杂谈之一:编译器

   文章评论:(0条)
  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。

 §最新评论:

  责任编辑:中国教程网  

© 2007 Copyright 中国教育网
DesignBy:AOE3 STUDIO & ROCOCO