C++用全域性函式過載運算子
阿新 • • 發佈:2019-01-08
運算子過載函式既可以宣告為類的成員函式,也可以宣告為所有類之外的全域性函式。
將運算子過載函式宣告為全域性函式時,二元操作符需要兩個引數,一元操作符需要一個引數,而其中必須有一個引數是物件,好讓編譯器區分這是程式設計師自定義的運算子。
以下例子是用全域性運算子過載計算複數的和:
#include <iostream> using namespace std; class complex{ private: double real; //實部 double imag; //虛部 public: complex() : real(0.0), imag(0.0){ } complex(double a, double b) : real(a), imag(b){ } void display()const{ cout << real << " + " << imag << "i" << endl; } friend complex operator+(const complex &A, const complex &B); //友元函式 }; //全域性運算子過載 complex operator+(const complex &A, const complex &B){ complex C; C.real = A.real + B.real; C.imag = A.imag + B.imag; return C; } int main(){ complex c1(4.3, 5.8); complex c2(2.4, 3.7); complex c3; c3 = c1 + c2; c3.display(); return 0; }
結果:
因為過載運算子函式要用到 complex 類的私有變數,所以我們將該函式宣告為友元函式。當執行:
c3 = c1 + c2;會被轉換為:
c3 = operator+(c1, c2);