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

C++重载运算符简单总结

2015-07-02 17:17 337 查看
  当运算符作用于类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义。明智的使用运算符重载能令我们的程序更易于编写和阅读。

一、基本概念

什么是运算符重载?
重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符共同组成。

重载运算符的方式有哪些?
一般可以通过类成员函数、友元函数或者是类外的普通函数重载运算符。

二、规则

不能重载的运算符有:.  .*  ::  和 sizeof

友元函数和成员函数的使用场合:
一般情况下,建议一元运算符元使用成员函数重载,二元运算符使用友元函数重载
a. 运算符的操作需要修改类对象的状态,则使用成员函数。比如需要做左值操作数的运算符(=, +=, -=)
b. 运算时,有数和对象的混合运算时,必须使用友元函数
c. 二元运算符中,第一个操作数位非对象时,必须使用友元函数。如 << 和 >>

  具体规则见下表:

运算符建议使用
所有一元运算符成员函数
= () [] ->必须是成员函数
+= -= /= *= ^= &= != %= >>= <<=成员函数
所有其他的二元运算符友元函数
<< >>必须友元函数
三、注意

一般情况下(除了函数调用操作符),重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。一元运算符有一个参数,二元运算符有两个参数。对于二元运算符来说,左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。

除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。

当一个重载的运算符是成员函数时,this 绑定到左侧运算对象。所以成员运算符函数的(显式)参数数量比运算对象的数量少一个。

对于一个运算函数来说,它或者是类的成员,或者至少含有一个类类型的参数:

//错误:不能为int重定义内置的运算符
int operator+(int ,int);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: