寫在前面
作爲移動端的開發語言,新秀們是支持運算符重載的,老一輩語言是不支持的。先透漏一點。
/*
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++大神就繞吧,非喜勿噴,畢竟這是個人的學習筆記📒