1. 程式人生 > >C++用全域性函式過載運算子

C++用全域性函式過載運算子

運算子過載函式既可以宣告為類的成員函式,也可以宣告為所有類之外的全域性函式。

將運算子過載函式宣告為全域性函式時,二元操作符需要兩個引數,一元操作符需要一個引數,而其中必須有一個引數是物件,好讓編譯器區分這是程式設計師自定義的運算子。

以下例子是用全域性運算子過載計算複數的和:

#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);