C++ 运算符重载
运算符重载
C++中,可以在自定义的类中重新定义运算符的功能,比如可以在程序员自己定义的类class中重新定义“+”、“-”、“*”等运算符的运算法则,可以作为类的成员函数,也可以作为非成员函数。其语法大致如下:
className operator operatorName( const className& var) const
语法解析
- operator:重载运算符的关键字;
- className:为返回值类型,可以是自定义的类,也可以是C++其它内置的类型;
- operatorName:运算符号,比如“+”、“--”等等;
- 参数为const类型的引用,可选;
- 最后一个const并不是必须的,当有这个const,则表明当前的函数为const成员函数,不会修改对象,否则为非const成员函数。
重点提示:运算符重载的函数定义之中,并不是所有的运算符都需要传递参数的,相反,有些是不能显式地传递参数的,有些只能传递一个,比如下面的“+”运算符重载如果传递两个参数,编译器就可能发出类似提示:operator+(const Banana&, const Banana&)' must have either zero or one argument。除此之外,有些会通过类的this指针将调用对象本身作为一个参数传递,比如下面的实例。
重载运算符的调用方法
classObj.operatoroperatorName(args)或classObj1 operatorName classObj2
operatoroperatorName为operator加运算符,比如operator-;非成员函数一般使用后者,具体可参考下方的实例代码。
运算符重载实例代码
下面实例,a.operator+(b)的代码中,a作为调用对象将通过this指针作为一个参数传递。
#include <iostream>
using namespace std;
class Banana{
public:
int length;
// 重载运算符+,并且为成员函数
Banana operator+(const Banana& b){
Banana c;
c.length = this->length + b.length;
return c;
}
};
// 重载运算符-,并且为非成员函数
Banana operator-(const Banana& a, const Banana& b){
Banana c;
c.length = a.length-b.length;
return c;
}
int main(){
Banana a;
Banana b;
a.length = 10;
b.length = 11;
Banana c;
c = a.operator+(b);
cout << c.length << endl;
Banana d = a-b;
cout << d.length << endl;
return 0;
}
编译运行后,得到输出:
21
-1
免责声明:内容仅供参考,不保证正确性。