您的位置:首页 > 编程语言 > C语言/C++

C++运算符重载

2012-07-10 21:27 169 查看
(1)运算符++和—(减减)分为前缀和后缀,重载为后缀时,

在函数的参数表里添加一个int型的标识参数,以便和前缀重载区分。

(2)赋值=运算符仅允许作为成员函数重载,不能重载为友元函数,此时要判断是否是自赋值。

(3)下标运算符[]也必须是成员函数并且需要单个参数,经常返回一个引用。

(4)运算符()必须被重载为成员函数,其参数可以有任意个,它使得对象看起来像一个真正的函数名,即函数对象。

(5)返回效率

当为通过传值方式返回而创建一个新对象时,要注意使用的形式。例如用运算符+号:

return integer(left.i + right.i);

一开始看起来像是"对一个构造函数的调用",但其实并非如此。这是临时对象语法,

它是这样陈述的:“创建一个临时对象并返回它”。因为这个原因,我们可能认为

如果创建一个命名的局部对象并返回它,结果将会是一样的。其实不然。如果

像下面这样表示,将发生三件事。首先,tm对象被创建,与此同时它的构造函数被

调用。然后,拷贝构造函数把tmp拷贝到返回值外部存储单元里。最后,当tmp在作用

域的结尾时调用析构函数。

integer tmp(left.i + right.i);

return tmp;

相反,"返回临时对象"的方法是完全不同的。看到这样的情况时,编译器明白对创建的

对象没有其它需求,只是返回它,所以编译器直接把这个对象创建在返回值外面的存储

单元里。因为不是正真创建一个局部对象,所以仅需要单个的普通构造函数调用(不需

要拷贝构造函数)并且不会调用析构函数。因此,这种方法不需要什么开销,效率是非常高的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: