分二部分:函數重載,操做符重載。c++
函數重載:指在同一名字空間中,函數名稱相同,參數類型、順序或數量不一樣的一類函數,同一函數名的函數能完成不一樣功能。函數
//非函數重載,只是返回值不同 void Fun(int i); int Fun(int i); //非函數重載,不在同一名字空間 namespace A { int Add(int i, int j); }; namespace B { float Add(float i, float j); }; //函數重載 int Add(int i, int j); float Add(float i, float j);
重命名機制:函數重載的名稱都是如出一轍的,C++編譯器就是經過重命名機制來區別這些同名函數的(不一樣的C++編譯器,重命名機制可能不同)。spa
//重命名機制 void Fun(int i, double j); //c++編譯器把函數名Fun其實重命名爲_Fun_int_double void Fun(double i, int j); //c++編譯器把函數名Fun其實重命名爲_Fun_double_int
C++調用C 函數:C++提供了一個C 鏈接交換指定符號extern「C」來解決這個問題。code
void Fun(int i, ini j); C 編譯器編譯後的名字爲_Fun。blog
void Fun(int i, int j); C++編譯器編譯後的名字爲_Fun_int_int。編譯器
C 編譯器和C++編譯器產生的名字不一樣,因此C++不能直接調用C 函數。用extern「C」解決。it
extern "C" { //頭文件 #include 「header.h」 //函數 void Fun(int i, int j); }
操做符重載:指用關鍵字operator加運算符表示的函數。能夠把其理解爲特殊形式的函數,運算符自己是函數名。編譯
int Add(int i, int j); //普通函數 int operator+(int i, int j); //+運算符函數 //用法 int k = Add(10, 20); int m = 10 + 20;
操做符重載規則:class
ps:後面講到類時再結合例子講解下操做符重載爲成員函數。基礎