C++运算符重载 - STEMHA's Blog

C++运算符重载

运算符重载

重载的运算符带有特殊名称的函数

  • 函数名是由关键字 operator 和其后要重载的运算符符号构成的。
  • 与其他函数一样,重载运算符有一个返回类型和一个参数列表

大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。

保持语义不变

  • 不改变运算符的优先级
  • 不改变运算符的结合性
  • 不改变运算符需要的操作数
  • 不能创建新的运算符

定义为类成员函数(令运算符重载函数作为类的成员函数)

例子,这里是二元运算符,在类的内部,只需要传入一个外部元素。

1
Box operator+(const Box&);

声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。

定义为普通的非成员函数(令运算符重载函数作为类的友元函数)

例子,这里是二元运算符,不在类里面,需要传入两个元素。

1
Box operator+(const Box&, const Box&);

声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。

这时候,就需要作为友元函数来操作类的对象了;

两种方式的区别

区别在于令运算符重载函数作为类的成员函数在调用时只需输入一个被操作数参数即可,另一个操作数参数则不需要输入;令运算符重载函数作为类的友元函数在调用时不仅要求输入被操作数参数,还要求输入被操作数参数。

产生了这个区别的原因在于令运算符重载函数作为类的成员函数和令运算符重载函数作为类的友元函数有本质区别:

(1)调用作为类的成员函数的运算符重载函数时,类对象肯定已经被建立了,这时对象中对应的私有数据成员存在。

(2)调用作为类的友元函数的运算符重载函数时,类对象还未被建立,这时对象中对应私有数据成员不存在。

运算符重载的方法步骤

运算符重载函数的参数个数 等于 运算符操作数的个数。
但要注意,用成员函数重载时,对应于运算符左操作数的参数是默认传递的。

参数的顺序和左右操作数的顺序是一样的,这一点看看<< 和 >> 的重载就知道了。

tips

重载一元运算符,在类的内部,不需要传入元素,参数为0。

重载++和–运算符号

int类型参数只是用来区别后置++与前置++,此外没有任何其他作用。

令运算符重载函数作为类的友元函数重载前置运算符和重载后置运算符分别如何实现?
答:也是一样的,传入参数多加一个int即可了

参考资料

C++的运算符重载
C++ 重载运算符和重载函数
STL 中list的sort()方法使用总结
STL 如何使用list::remove_if
C++ list.merge()使用方法

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×