C++的重載

C++允許函數(shù)和運(yùn)算符多個(gè)定義形导,當(dāng)重載函數(shù)或者重載運(yùn)算符被調(diào)用的時(shí)候环疼,編譯器將決定使用的參數(shù)類型與定義函數(shù)中參數(shù)類型進(jìn)行比對(duì),選擇對(duì)合適的函數(shù)朵耕,這個(gè)過程也就是重載決策秦爆。

1. 函數(shù)重載

函數(shù)同名,參數(shù)不同憔披。

#include <iostream>

using namespace std;

class Print
{
public:
    void print(int n)
    {
        cout << "int : " << n << endl;
    }
    void print(float f)
    {
        cout << "float : " << f << endl;
    }
};

int main(int argc, char **argv)
{
    Print p;
    p.print(3);
    p.print(3.14);
    return 0;
}
//輸出:
//int : 3
//float : 3.14

2. 運(yùn)算符重載

大部分運(yùn)算符都可以進(jìn)行重載等限,用于自定義運(yùn)算類型爸吮,當(dāng)然也有例外的運(yùn)算符:

#include <iostream>

using namespace std;

class AREA
{
private:
    int length;
    int width;
public:
    AREA()
    {
        length = 0;
        width = 0;
    }
    AREA(int len, int wid)
    {
        length = len;
        width = wid;
    }
public:
    void SetLength(int len)
    {
        length = len;
    }
    void SetWidth(int wid)
    {
        width = wid;
    }
    int GetLength()
    {
        return length;
    }
    int GetWidth()
    {
        return width;
    }
public:
    AREA operator+(const AREA &area)
    {
        AREA temp;
        temp.length = length + area.length;
        temp.width = width + area.width;
        return temp;
    }
    AREA operator-()
    {
        AREA temp;
        temp.length = -length;
        temp.width = -width;
        return temp;
    }
    void operator=(const AREA &area)
    {
        length = area.length;
        width = area.width;
    }
    bool operator==(const AREA &area)
    {
        return length == area.length && width == area.width;
    }
    bool operator<(const AREA &area)
    {
        if (length < area.length)
        {
            return true;
        }
        if (length == area.length && width < area.width)
        {
            return true;
        }
        return false;
    }
    bool operator>(const AREA &area)
    {
        if (length > area.length)
        {
            return true;
        }
        if (length == area.length && width > area.width)
        {
            return true;
        }
        return false;
    }
    friend ostream & operator<<(ostream & output, const AREA &area)
    {
        output << "len : " << area.length << ", wid : " << area.width << endl;
        return output;
    }
    friend istream & operator>>(istream & input, AREA &area)
    {
        input >> area.length >> area.width;
        return input;
    }
    AREA operator()(int a, int b, int c, int d)
    {
        AREA area;
        area.length = a + b;
        area.width = c + d;
        return area;
    }
    AREA operator++()
    {
        ++length;
        ++width;
        return AREA(length, width);
    }
    AREA operator++(int)
    {
        AREA area(length, width);
        ++area.length;
        ++area.width;
        return area;
    }
};

int main(int argc, char **argv)
{
    AREA a, b, c, d, e;
    
    a.SetLength(3);
    a.SetWidth(4);
    b.SetLength(5);
    b.SetWidth(5);

    // 求和
    c = a + b;
    cout << "c.length : " << c.GetLength()<< endl;
    cout << "c.width : " << c.GetWidth()<< endl;
    // 大于
    cout << "a > b : " << (a > b) << endl;
    // 小于
    cout << "a < b : " << (a < b) << endl;
    // 取反
    d = -a;
    cout << "d.length : " << d.GetLength()<< endl;
    cout << "d.width : " << d.GetWidth()<< endl;
    // >>
    // 輸入length和width
    cin >> e;
    cout << "e.length : " << e.GetLength()<< endl;
    cout << "e.width : " << e.GetWidth()<< endl;
    // <<
    cout << "a : " << a << endl;
    // ()
    a(1, 2, 1, 2);
    // 前綴++
    ++b;
    // 后綴++
    c++;
    return 0;
}

有一個(gè)特殊的運(yùn)算符是[],不是因?yàn)橛梅ㄌ厥馔牛羌刹坏缴厦孢@個(gè)類里(笑)形娇,所以單獨(dú)寫出來

#include <iostream>

using namespace std;

const int ARRAY_SIZE = 10;

class SPECIAL
{
private:
    int array[ARRAY_SIZE];
public:
    SPECIAL()
    {
        for (int i = 0; i < ARRAY_SIZE; ++i)
        {
            array[i] = i;
        }
    }
    int & operator[](int pos)
    { // 這里只是舉個(gè)使用的示例,最好還是在使用數(shù)組下標(biāo)前確認(rèn)是否合法
        if (pos < 0)
        {
            return array[0];
        }
        else if (pos > ARRAY_SIZE)
        {
            return array[ARRAY_SIZE - 1];
        }
        return array[pos];
    }
};

int main(int argc, char **argv)
{
    SPECIAL ps;
    cout << "-1 : " << ps[-1] << endl;
    cout << "100 : " << ps[100] << endl;
    cout << "3 : " << ps[3] << endl;
    return 0;
}

常見的運(yùn)算符重載就這些筹误,如果有遺漏桐早,以后再補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厨剪,一起剝皮案震驚了整個(gè)濱河市哄酝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祷膳,老刑警劉巖陶衅,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異直晨,居然都是意外死亡搀军,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門勇皇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罩句,“玉大人,你說我怎么就攤上這事敛摘∶爬茫” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵兄淫,是天一觀的道長屯远。 經(jīng)常有香客問我,道長拖叙,這世上最難降的妖魔是什么氓润? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任赂乐,我火速辦了婚禮薯鳍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挨措。我一直安慰自己挖滤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布浅役。 她就那樣靜靜地躺著斩松,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觉既。 梳的紋絲不亂的頭發(fā)上惧盹,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天乳幸,我揣著相機(jī)與錄音,去河邊找鬼钧椰。 笑死粹断,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嫡霞。 我是一名探鬼主播瓶埋,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诊沪!你這毒婦竟也來了养筒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤端姚,失蹤者是張志新(化名)和其女友劉穎晕粪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寄锐,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兵多,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橄仆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剩膘。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盆顾,靈堂內(nèi)的尸體忽然破棺而出怠褐,到底是詐尸還是另有隱情,我是刑警寧澤您宪,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布奈懒,位于F島的核電站,受9級(jí)特大地震影響宪巨,放射性物質(zhì)發(fā)生泄漏磷杏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一捏卓、第九天 我趴在偏房一處隱蔽的房頂上張望极祸。 院中可真熱鬧,春花似錦怠晴、人聲如沸遥金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稿械。三九已至,卻和暖如春冲粤,著一層夾襖步出監(jiān)牢的瞬間美莫,已是汗流浹背页眯。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厢呵,地道東北人餐茵。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像述吸,于是被迫代替她去往敵國和親忿族。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354