物件導向程式設計(三) 過載運算子和過載函式

2021-09-21 01:35:35 字數 2963 閱讀 5535

c++ 允許在同一作用域中的某個函式運算子指定多個定義,分別稱為函式過載運算子過載

過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義(實現)不相同。

當您呼叫乙個過載函式過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用最合適的定義。選擇最合適的過載函式或過載運算子的過程,稱為過載決策

在同乙個作用域內,可以宣告幾個功能類似的同名函式,但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同。您不能僅通過返回型別的不同來過載函式。

下面的例項中,同名函式print()被用於輸出不同的資料型別:

#include using namespace std;

class printdata

void print(double f)

void print(char c) };

int main(void)

當上面的**被編譯和執行時,它會產生下列結果:

整數為: 5

浮點數為: 500.263

字串為: hello c++

您可以重定義或過載大部分 c++ 內建的運算子。這樣,您就能使用自定義型別的運算子。

過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。

box operator+(const box&);
宣告加法運算子用於把兩個 box 物件相加,返回最終的 box 物件。大多數的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。如果我們定義上面的函式為類的非成員函式,那麼我們需要為每次操作傳遞兩個引數,如下所示:

box operator+(const box&, const box&);
下面的例項使用成員函式演示了運算子過載的概念。在這裡,物件作為引數進行傳遞,物件的屬性使用this運算子進行訪問,如下所示:

#include using namespace std;

class box

void setlength( double len )

void setbreadth( double bre )

void setheight( double hei )

// 過載 + 運算子,用於把兩個 box 物件相加

box operator+(const box& b)

private:

double length; // 長度

double breadth; // 寬度

double height; // 高度

};// 程式的主函式

int main( )

{ box box1; // 宣告 box1,型別為 box

box box2; // 宣告 box2,型別為 box

box box3; // 宣告 box3,型別為 box

double volume = 0.0; // 把體積儲存在該變數中

// box1 詳述

box1.setlength(6.0);

box1.setbreadth(7.0);

box1.setheight(5.0);

// box2 詳述

box2.setlength(12.0);

box2.setbreadth(13.0);

box2.setheight(10.0);

// box1 的體積

volume = box1.getvolume();

cout << "volume of box1 : " << volume 《當上面的**被編譯和執行時,它會產生下列結果:

volume of box1 : 210

volume of box2 : 1560

volume of box3 : 5400

下面是可過載的運算子列表:

雙目算術運算子

+ (加),-(減),*(乘),/(除),% (取模)

關係運算子

==(等於),!= (不等於),< (小於),> (大於》,<=(小於等於),>=(大於等於)

邏輯運算子

||(邏輯或),&&(邏輯與),!(邏輯非)

單目運算子

+ (正),-(負),*(指標),&(取位址)

自增自減運算子

++(自增),--(自減)

位運算子

| (按位或),& (按位與),~(按位取反),^(按位異或),,<< (左移),>>(右移)

賦值運算子

=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=

空間申請與釋放

new, delete, new[ ] , delete

其他運算子

()(函式呼叫),->(成員訪問),,(逗號),(下標)

下面是不可過載的運算子列表:

下面提供了各種運算子過載的例項,幫助您更好地理解過載的概念。

序號運算子和例項

1一元運算子過載

2二元運算子過載

3關係運算子過載

4輸入/輸出運算子過載

5++ 和 -- 運算子過載

6賦值運算子過載

7函式呼叫運算子 () 過載

8下標運算子 過載

9類成員訪問運算子 -> 過載

物件導向程式設計 函式過載運算子

定義complex類,它包含兩個雙精度型的資料成員real 和 imag 以及兩個建構函式 乙個是無參函式,乙個是有引數的函式。要求 使用類的成員函式 或者友元函式過載運算子 使其能夠實現complex類物件的相應運算。注 a bi c di ac bd c2 d2 bc ad c2 d2 i in...

C 物件導向 C 過載運算子和過載函式

c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當您呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選...

過載運算子

題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...