運算子過載函式既可以做為類成員函式也可以過載為友元函式,但使用定義方法和使用上是由較大差別的。
首先看乙個運算子過載函式作為類成員函式的示例**:
定義complex為複數類,過載運算子"+"實現複數的相加。
程式1.1
#include using namespace std;這是過載"+"的成員函式,實現了兩個類中的成員變數的值相加,並賦給第三個變數的功能。class complex
complex(double r,double i)
complex operator +(complex &c2);//宣告過載運算子"+"的函式
void display();
private:
double real;
double imag;
};complex complex::operator+(complex &c2)//定義過載運算子"+"的函式
void complex::display()
但是,函式只有乙個形參,那麼另外乙個進行加操作的類是誰呢?
實際上語句:c3=c1+c2;被解釋為c3=c1.operator+(c2);
也就是說,c1類呼叫了它的成員函式operator+();c2作為該成員函式的實參。
當兩個complex類執行"+"運算時,「+」左面的類呼叫成員函式operator+(),並將c2作為函式的實參進行操作。
我們也是先看一段程式**:
程式的功能和程式1.1是一樣的,不過我們在程式1.2中將運算子過載函式作為友元函式進行操作。
程式1.2
#include using namespace std;該函式是類complex的友元函式,也就是說它不是complex類的成員函式,complex類物件不能呼叫該函式。class complex
complex(double r,double i)
friend complex operator +(complex &c1,complex &c2);//宣告過載運算子"+"的函式
void display();
private:
double real;
double imag;
};complex operator+(complex &c1,complex &c2)//定義過載運算子"+"的函式
void complex::display()
c3=c1+c2;被解釋為c3=operator + (c1,c2);也是就說相加的兩個類物件都作為operator +()的引數。
C 運算子過載函式作為類成員函式和友元函式
例10.2中對運算子 進行了過載,使之能用於兩個複數的相加。在該例中運算子過載函式operator 作為complex類中的成員函式。可能有的讀者會提出這樣的問題 是雙目運算子,為什麼在例10.2程式中的過載函式中只有乙個引數呢?實際上,運算子過載函式有兩個引數,由於過載函式是complex類中的成...
10 2 運算子過載函式作為類成員函式和友元函式
complex operator complex c2 是雙目運算子,函式過載中只有乙個引數,實際上運算子過載函式有兩個引數,是由於過載函式是complex類中的成員函式,有乙個引數是隱含的,運算子函式是用this 指標隱士的訪問物件成員函式。complex operator complex thi...
運算子過載 成員函式
檔名稱 test.cpp 完成日期 2016年5月14日 問題描述 請用類的成員函式,定義複數類過載運算子 使之能用於複數的加減乘 include using namespace std class complex complex double r,double i complex operator...