運算子過載函式作為類成員函式和友元函式

2022-08-30 16:54:22 字數 1306 閱讀 4088

運算子過載函式既可以做為類成員函式也可以過載為友元函式,但使用定義方法和使用上是由較大差別的。

首先看乙個運算子過載函式作為類成員函式的示例**:

定義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;

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()

該函式是類complex的友元函式,也就是說它不是complex類的成員函式,complex類物件不能呼叫該函式。

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...