寫在前面
作為移動端的開發語言,新秀們是支援運算子過載的,老一輩語言是不支援的。先透漏一點。
/*
C語言不支援運算子過載
java中確實沒有云運算子過載,唯一例外是String裡面的=和+ String類的"=","+","+=",看似運算子過載,實際不是,只是在java編譯器裡做了一點手腳
OC語言不支援運算子過載
swift 支援運算子過載
kotlin 支援運算子過載
C++ 支援運算子過載 ?
*/
複製程式碼
名詞解釋
◼規則
函式名相同 引數個數不同、引數型別不同、引數順序不同
◼注意
返回值型別與函式過載無關 呼叫函式時,實參的隱式型別轉換可能會產生二義性
◼本質
採用了name mangling或者叫name decoration技術
✓ C++編譯器預設會對符號名(變數名、函式名等)進行改編、修飾,有些地方翻譯為“命名傾軋” ✓ 過載時會生成多個不同的函式名,不同編譯器(MSVC、g++)有不同的生成規則
複製程式碼
上程式碼
將main.m 改為mian.mm 檔案
C++ 如何定義函式
void hehehe() {
cout << "hehehe() " << endl;
}
上面定義了名稱為hehehe的函式,函式體就是列印一下函式名,看著後面部分和swift一樣,
(不好意思,暴露了能力--?,我寫了兩年多的swift了--從2.0就入坑了)
對就是這麼簡單與隨意。
看下完整的程式碼
#include <iostream>
using namespace std;
// hehehe_v
void hehehe() {
cout << "hehehe() " << endl;
}
// hehehe_i
void hehehe(int a) {
cout << "hehehe(int a) " << a << endl;
}
// hehehe_l
void hehehe(long a) {
cout << "hehehe(long a) " << a << endl;
}
// hehehe_d
void hehehe(double a) {
cout << "hehehe(double a) " << a << endl;
}
// main
int main() {
hehehe();
hehehe(10);
hehehe(10l);
hehehe(10.1);
}
看看列印結果:
hehehe()
hehehe(int a) 10
hehehe(long a) 10
hehehe(double a) 10.1
嗯嗯,沒問題,似乎如喝到了小時的冰水,這感覺爽爽的。
複製程式碼
完整程式碼demo,請移步GitHub:DDGLearningCpp
當然C++大神就繞吧,非喜勿噴,畢竟這是個人的學習筆記?