C 過載運算子和過載函式

2021-10-02 08:47:34 字數 1938 閱讀 5384

首先了解什麼是過載,過載就是在同乙個作用域內對某個函式或者運算子指定多個定義。這麼做的目的是方便後續程式設計中對一些特殊型別資料進行運算等。當我們呼叫乙個過載函式或者過載運算子時,編譯器會根據我們呼叫時使用的引數型別、個數、順序等選擇合適的定義。這一過程稱為過載決策。

函式過載是在同乙個定義域內宣告幾個同名的函式,這些函式名字一樣但是形參不一樣,即型別、順序、個數。注意這裡不可以僅僅通過返回型別的差異來過載函式。

在下面的例項中,三個print函式的過載是可以被接受的:

class

printdata

void

print

(double f)

void

print

(char c)

}

c++的過載運算子實際上也是乙個函式,只不過它的函式名是由operator開頭,後面跟著要過載的運算符號構成。當然,過載運算子也有自己的返回型別和引數列表。為什麼要過載運算子?過載運算子之後我們就可以對一些原本不能直接用基本運算子運算的資料進行簡單快捷的處理。比如我想對乙個類的物件進行加法運算(當然是對這個物件的相應成員進行加法運算),如果不過載加法運算子,那麼我每次碰到這樣的要求都需要把這個兩個物件的所有對應成員單獨提出來用加法相加,這樣就會很麻煩。過載加法運算子之後直接一句加法運算就搞定了。過載這個加法運算子時有兩種方法,一種是在類外的普通非成員函式,一種是類成員函式。如果是類外的非成員函式,那麼函式定義需要兩個引數:

box operator

+(const box&,const box&);

實現的是把兩個box物件相加,返回乙個box物件。

另一種方式是類中成員函式,只需要乙個引數:

box operator

+(const box&);

下面的例項給出了加法運算子過載的概念:

box operator+(

const box& b)

可以看到是通過this指標訪問的物件屬性。在主函式種呼叫這個過載運算子時,比如box3=box1+box2,這個box2就是過載加法中的形參b。

下面總結了一些可以過載的和不可過載的運算子1

可過載:

雙目算術運算子

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

關係運算子

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

邏輯運算子

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

單目運算子

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

自增自減運算子

++(自增),–(自減)

位運算子

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

賦值運算子

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

空間申請與釋放

new, delete, new[ ] , delete

其他運算子

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

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

.:成員訪問運算子

.* ,->*:成員指標訪問運算子

:::域運算子

sizeof:長度運算子

?::條件運算子

#:預處理符號

來自link↩︎

C 過載運算子和過載函式

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

C 過載運算子和過載函式

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

C 過載函式和過載運算子

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