标签:
关键字:operator
相见:《高质量程序设计指南》 P255
如果运算符被重载为全局函数,那么只有一个参数的运算符叫做一元运算符,有两个参数的运算符叫做二元运算符。
如果运算符被重载为类的成员函数,那么一元运算符没有参数(但是++和--运算符的后置版本除外),二元运算符只有右侧参数,因为对象自己成了左侧参数。
运算符重载的特殊性
不能重载的运算符
重载 ++ 和 --
C++标准规定:当为一个类型重载“++”和“--”的前置版本时,不需要参数;当为一个类型重载“++”和“--”的后置版本时,需要一个int类型的参数作为标志(即哑元,非具名参数)
class Integer { public: Integer(long data) :m_data(data) {} Integer& operator++()//前置版本:返回引用 { cout << "Integer& operator++() called!" << endl; m_data++; return *this; } Integer operator++(int)//后置版本:返回对象的值 { cout << "Integer& operator++(int) called!" << endl; Integer temp = *this; m_data++; //或++(*this); return temp; //返回this对象的旧值 } protected: private: long m_data; //对long 的封装 }; int main() { Integer x = 1;//call Integer(long) ++x; //call operator++() x++; //call operator++(int) return 0; }
当"++" 和 "--"应用于基本类型数据时,前置版本和后置版本在效率上没有多大差别。然而,当应用于用户定义类型,尤其是大对象的时候,前置版本就会比后置版本的效率高许多。后置版本总是要创建一个临时对象,在退出函数还要销毁它,而且返回临时对象的值时还会调用其拷贝对象。所以,如果你可以选择的话,尽量使用前置版本。
标签:
原文地址:http://www.cnblogs.com/zhehan54/p/5232721.html