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

免责声明:内容仅供参考,不保证正确性。


全栈后端 / C++教程 :
















Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.