02-函數重載

寫在前面

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章