C 過載運算子和過載函式

2021-09-02 22:58:36 字數 4358 閱讀 3298

過載運算子和過載函式

c++ 中的函式過載

c++ 中的運算子過載

c++ 一元運算子過載

c++ 二元運算子過載

c++ 關係運算子過載

c++ 輸入/輸出運算子過載

c++ 賦值運算子過載

c++ 函式呼叫運算子 () 過載

c++ 下標運算子 過載

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

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

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

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

#include using namespace std;

class putdata

void put_data(double fl)

void put_data(char ch) };

void main()

/*輸出結果為

整數為: 5

浮點數為: 6.6

字元為: c

*/

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

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

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

box operator+(const box&, const box&);
#include using namespace std;

class line

;line::line(int num)

int line::get_lenth()

line line::operator+(const line& l)

void main()

/*輸出結果為

line3 的長度是15

*/

一元運算子只對乙個運算元進行操作,下面是一元運算子的例項:

一元運算子通常出現在它們所操作的物件的左邊,比如 !obj、-obj 和 ++obj,但有時它們也可以作為字尾,比如 obj++ 或 obj--。

#include using namespace std ;

class distance

void displaydis()

distance operator- () };

void main()

/*輸出結果為

creat a object

dis1 is 10

dis2 is 20

creat a object

dis1 is -10

dis2 is -20

*/

二元運算子需要兩個引數,下面是二元運算子的例項。我們平常使用的加運算子( + )、減運算子( - )、乘運算子( * )和除運算子( / )都屬於二元運算子。就像加(+)運算子。

#include using namespace std ;

class distance

void displaydis()

distance operator-(const distance &dis) };

void main()

/*輸出結果為

creat a object

creat a object

creat a object

creat a object

dis1 is 5

dis2 is 15

*/

c++ 語言支援各種關係運算子( < 、 > 、 <= 、 >= 、 == 等等),它們可用於比較 c++ 內建的資料型別。

您可以過載任何乙個關係運算子,過載後的關係運算子可用於比較類的物件。

#include using namespace std ;

class distance

void displaydis()

bool operator<(const distance &dis)

else if(this->dis1 > dis.dis1)

else

}};void main()

else }

/*輸出結果為

creat a object

creat a object

d2 小

*/

c++ 能夠使用流提取運算子 >> 和流插入運算子 << 來輸入和輸出內建的資料型別。您可以過載流提取運算子和流插入運算子來操作物件等使用者自定義的資料型別。

在這裡,有一點很重要,我們需要把運算子過載函式宣告為類的友元函式,這樣我們就能不用建立物件而直接呼叫函式。

#include using namespace std;

class distance

distance(int f, int i)

friend ostream &operator<<( ostream &output,

const distance &d )

friend istream &operator>>( istream &input, distance &d )

};int main()

/*輸出結果為

enter the value of object :

1515

first distance : f : 11 i : 10

second distance :f : 5 i : 11

third distance :f : 15 i : 15

*/

就像其他運算子一樣,您可以過載賦值運算子( = ),用於建立乙個物件,比如拷貝建構函式。

#include using namespace std;

class distance

distance(int f, int i)

void operator=(const distance &d )

// 顯示距離的方法

void displaydistance()

};int main()

/*輸出結果為

first distance : f: 11 i:10

second distance :f: 5 i:11

first distance :f: 5 i:11

*/

函式呼叫運算子 () 可以被過載用於類的物件。當過載 () 時,您不是創造了一種新的呼叫函式的方式,相反地,這是建立乙個可以傳遞任意數目引數的運算子函式。

#include using namespace std;

class distance

distance(int f, int i)

// 過載函式呼叫運算子

distance operator()(int a, int b, int c)

// 顯示距離的方法

void displaydistance()

};int main()

/*輸出結果為

first distance : f: 11 i:10

second distance :f: 30 i:120

*/

下標操作符 通常用於訪問陣列元素。過載該運算子用於增強操作 c++ 陣列的功能。

#include using namespace std;

const int size = 10;

class safearay

}int& operator(int i)

{if( i > size )

{cout << "索引超過最大值" <部分資料**於菜鳥教程

C 過載運算子和過載函式

c 函式過載 在同乙個作用域內,可以宣告幾個功能類似的同名函式,但這些同名函式的形式引數必須不同。c 中的運算子過載 過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。可過載運算子 不可過載運算子 可過載運算子 雙目算術運算子,關係運算子,邏輯運算...

C 過載運算子和過載函式

參考 前言 運算子過載和函式過載體現了物件導向技術的多型性。多型性機制不僅增加了物件導向軟體系統的靈活性,進一步減少了冗餘資訊,而且顯著提高了軟體的可重用性和可擴充性。從實現的角度來講,多型性可以劃分為兩類 編譯時的多型性和執行時的多型性。在c 語言中,編譯時的多型性主要是通過函式過載和運算子過載實...

C 過載函式和過載運算子

在同乙個作用域內,可以宣告幾個功能類似的同名函式,但是這些同名函式的形式引數 指引數的個數 型別或者順序 必須不同。不能僅通過返回型別的不同來過載函式。下面的例項中,同名函式print 被用於輸出不同的資料型別 include using namespace std class printf voi...