c++ 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。
過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義(實現)不相同。
當您呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用最合適的定義。選擇最合適的過載函式或過載運算子的過程,稱為過載決策。
在同乙個作用域內,可以宣告幾個功能類似的同名函式,但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同。您不能僅通過返回型別的不同來過載函式。
下面的例項中,同名函式 print() 被用於輸出不同的資料型別:
#include
using
namespace std;
class
printdata
void
print
(double f)
void
print
(char c)
};intmain
(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
boxvoid
setlength
(double len )
void
setbreadth
(double bre )
void
setheight
(double hei )
// 過載 + 運算子,用於把兩個 box 物件相加
box operator+(
const box& b)
private
:double length;
// 長度
double breadth;
// 寬度
double height;
// 高度};
// 程式的主函式
intmain()
當上面的**被編譯和執行時,它會產生下列結果:
volume of box1 :
210volume of box2 :
1560
volume of box3 :
5400
下面是可過載的運算子列表:
雙目算術運算子
+ (加),-(減),*(乘),/(除),% (取模)
關係運算子
==(等於),!= (不等於),< (小於),> (大於》,<=(小於等於),>=(大於等於)
邏輯運算子
(邏輯或),&&(邏輯與),!(邏輯非)
單目運算子
+ (正),-(負),*(指標),&(取位址)
自增自減運算子
++(自增),–(自減)
位運算子
賦值運算子
=, +=, -=, *=, /= , % = , &=,
空間申請與釋放
new, delete, new[ ] , delete
其他運算子
()(函式呼叫),->(成員訪問),,(逗號),
下面是不可過載的運算子列表:
.:成員訪問運算子
., ->:成員指標訪問運算子
:::域運算子
sizeof:長度運算子
?::條件運算子
.運算子過載例項
下面提供了各種運算子過載的例項,幫助您更好地理解過載的概念。
PHP學習筆記3 過載
方法過載 使用魔術方法 描述 讀取不可訪問屬性的值時,get 會被呼叫。語法 public mixed get string name 例子 class student 建立學生類物件 obj new student 訪問私有屬性 echo 的年齡是 歲。描述 再給不可訪問屬性賦值時,set 會被呼...
python boost學習筆記8,過載函式
這裡學習了 過載使用類似於函式指標的概念,讓python在呼叫的時候知道應該呼叫哪乙個函式 void example d1 example doit std string example d2 unsigned int example doit void example d3 std string ...
C 入門(6)過載
過載 using system class vector 獲取向量的長度 public double getlength 過載運算子 public static bool operator vector a,vector b 過載運算子 public static bool operator vec...