青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 25, 文章 - 0, 評(píng)論 - 6, 引用 - 0
數(shù)據(jù)加載中……

C++操作符重載

//原文鏈接: http://blog.csdn.net/xiegenwendada/article/details/8477209 

#include<stdio.h>  
#include <stdlib.h>  

/*///////////////////////////// 操作符重載 ////////////////////////////////////////////
-
-    操作符重載必須是,參數(shù)類型或個(gè)數(shù)不同,還有是否為const,但不以返回值的類型左判斷。
-
-    ------------------------------------------------------------------------------------    
-    |            不能重載的操作符號(hào)            |            可以重載的操作符                |
-    ------------------------------------------------------------------------------------
-    |    . .* :: ?: new delete sizeof        |    new new[] delete delete[] + - * / % ^    |
-    |    typeid static_cast dynamic_cast        |    & | ~ ! = < > += -= *= /= %=  ^= &= |=    |
-    |    const_cast reintERPret_cast            |    << >> >>= <<= == != <= >= && || ++ --    |
-    |                                        |    ->* -> () []                            |
-    -------------------------------------------------------------------------------------
-    
-
-    ------------------------------------------------------------------------------------    
-    |            類成員操作符重載            |            友員函數(shù)操作符重載                |
-    ------------------------------------------------------------------------------------
-    |        左右操作數(shù)都是該類對(duì)象            |            左操作數(shù)為其它類型                |
-    | 必須為類成員操作符:                    |                                            |
-    | 賦值(=),下標(biāo)([]),調(diào)用(())        |                                            |
-    | 和成員訪問(wèn)箭頭(->)                    |                                            |
-    -------------------------------------------------------------------------------------
-
//////////////////////////////// 操作符重載 ////////////////////////////////////////////
*/

// 簡(jiǎn)單的重載
class CBaseOperator  
{  

public:  
    int nData;        //測(cè)試的變量  

public:  
    CBaseOperator(int nData = 0):nData(nData)  
    {  
        nData++;  
        --nData;  
    }  


    CBaseOperator(const CBaseOperator& cBO)  
    {  
        nData = cBO.nData;  
    }  
    //重載=操作符,一般=操作符和拷貝構(gòu)造函數(shù)是成對(duì)出現(xiàn)的。  
    const CBaseOperator& operator=(const CBaseOperator& cBO)  
    {  
        nData = cBO.nData;  
        return *this;  
    }  

public:  

    //重載+操作符,簡(jiǎn)單的二元操作符重載是最常見(jiàn)也是比較簡(jiǎn)單的。基本思路都是這樣,注意如果  
    
//操作符出現(xiàn)在左邊,則只能用友員了。這里了有幾個(gè)返回類型是CBaseOperator,return  
    
//語(yǔ)句中卻是兩個(gè)int相加,這種情況是可以通過(guò)的,編譯器會(huì)自動(dòng)構(gòu)建一個(gè)相應(yīng)的對(duì)象返回,  
    
//前提是你的構(gòu)造函數(shù)要有相應(yīng)的參數(shù),這里是int作為參數(shù)  
    int operator+(int nAdd) const  
    {  
        return nData + nAdd;  
    }  

    int operator+(int nAdd)  
    {  
        return nData + nAdd;  
    }  

    friend int operator+(int nAdd,const CBaseOperator& cAdd)  
    {  
        return nAdd + cAdd.nData;  
    }  

    CBaseOperator operator+(const CBaseOperator& cAdd) const  
    {  
        return nData + cAdd.nData;  
    }  

    //重載減法什么的也是一樣。就不寫了。哈哈  

    
//比較操作符重載==,!=,>, >=, <, <=總結(jié):這里都是配套的操作一般來(lái)說(shuō)如果寫一個(gè)  
    
//都會(huì)重載其他幾個(gè),特別是==,!=。當(dāng)然也有例外。哈哈。。  
    bool operator==(const CBaseOperator& cEqual) const  
    {  
        return nData == cEqual.nData;  
    }  
    bool operator == (int nEqual) const  

    {        

        return nData == nEqual;  
    }  
    friend bool operator ==(int nEqual, const CBaseOperator& cEqual)  
    {  
        return cEqual.nData == nEqual;  
    }  
    bool operator!=(const CBaseOperator& cEqual) const  
    {  
        return nData != cEqual.nData;  
    }  

    //其他的也就不寫了,基本一樣。哈哈  

    
//重載++,--操作符,因?yàn)?+,--有兩種方式,一種是前增量(++XXX先改變自己,返回),  
    
//一種是后增量(改變自己,返回改變前的狀態(tài))  
    
//因?yàn)橹剌d是判斷參數(shù)的,為了能區(qū)別前增量和后增量,C++的設(shè)計(jì)者做了這樣的考慮。  
    
//就是重載后增量的時(shí)候在參數(shù)列表中加一個(gè)int類型參數(shù),這樣就避免的重載的重復(fù)了。  
    
//在調(diào)用上,如果都重載,那么用int參數(shù)的是后增量++,沒(méi)有參數(shù)的是前增量++,  
    
//(注:我在這里說(shuō)的是成員函數(shù),當(dāng)然友員的重載參數(shù)個(gè)數(shù)要多一個(gè),以后的我可別說(shuō)我無(wú)知啊。)  
    
//如果都重載,那么前增量和后增量都會(huì)調(diào)用相應(yīng)的函數(shù),如果只重載了后增量,那么前增量會(huì)失敗  
    
//如果只重載了前增量,就會(huì)無(wú)論是前增量和后增量都會(huì)調(diào)用這個(gè)函數(shù)。所以一般他們也是成對(duì)  
    
//出現(xiàn)的,除非你懶,只寫前增量,可惜如果人家要調(diào)用后增量呢?結(jié)果會(huì)錯(cuò)的哦。哈哈。  

    
//重載后增量.  
    CBaseOperator operator++(int)  
    {  
        CBaseOperator cTemp = *this;  
        ++nData;  
        return cTemp;  
    }  

    //重載前增量  
    CBaseOperator& operator++()  
    {  
        ++nData;  
        return *this;  
    }  

    //重載--操作符是一樣的,也不寫了。  

    
//重載[],()等操作符號(hào),同樣[]的參數(shù)個(gè)數(shù)是確定的。  
    
//我之說(shuō)以把他們寫一起,是因?yàn)槲义e(cuò)誤的以為[]的參數(shù)個(gè)數(shù)是可以自己定義。錯(cuò)了錯(cuò)了。  
    
//知錯(cuò)能改是好的,對(duì)了,()的參數(shù)個(gè)數(shù)是可以自己定義的。這個(gè)就給我們很大的發(fā)揮空間了。  
    
//都忘了[],() = 等操作符必須是成員函數(shù),上面有寫。不能用友員和靜態(tài)成員函數(shù)  

    
//重載[]  
    int operator[](int nIndex) const  
    {  
        return nIndex;  
    }  

    //重載()  
    int operator()(int a) const  
    {  
        return a;  
    }  

    bool operator()(int a, int b) const  
    {  
        return a > b;  
    }  

    CBaseOperator operator()(int a, int b, int c)  
    {  
        return CBaseOperator(a+b+c+*this);  
    }  

    //重載*,->的操作符,*操作符就是相當(dāng)于指針的*p;不過(guò)這里已經(jīng)失去了原來(lái)的意義,他不是一個(gè)指針了。  
    
//但如果是想通過(guò)他來(lái)得到一些東西,也是可以的,特別在迭代器中常用這種方法。->也是和*配對(duì)出現(xiàn)的。  
    
//不過(guò)->操作符比較有意思,貌似和(*p).dddd真的差不多,所以返回的應(yīng)該是一個(gè)結(jié)構(gòu)的指針,我們這里  
    
//就返回了本身,當(dāng)然可以返回任何結(jié)構(gòu)的指針的。(并不是只能返回本身)。  

    
//重載*,這里參數(shù)個(gè)數(shù)是固定的,多寫一個(gè)就成了乘法的操作了。哈哈  
    int operator*() const  
    {  
        return nData;  
    }  

    //重載->  
    CBaseOperator* operator->()  
    {  
        return this;  
    }  

    //其他的例如&& || 這樣的操作符還是不重載的好。利用其原有的本性  

    
//重載new delete,這里編譯器做了一個(gè)限制,new必須返回void*類型, delete必須  
    
//返回void類型。(上面說(shuō)過(guò)函數(shù)重載是不檢查返回類型的,和這里并沒(méi)有沖突,他只是限定了返回  
    
//類型,而不是只有返回類型不同的函數(shù)能重載,這個(gè)是編譯器做的工作,一定上確保new能更好的工作吧)  
    
//還有就是他們的參數(shù)個(gè)數(shù)都是可以自定義的。new 和 new[] 是兩個(gè)不同的操作符,所以還是要分別重載一下。  
    
//delete 和 delete[] 也是兩個(gè)不同的操作符。這里只重載了一個(gè)。  
    voidoperator new(size_t size)  
    {  

        return  malloc(size);  
    }  

    voidoperator new[](size_t size)  
    {  
        return  malloc(size);  
    }  

    void operator delete(void* P, unsigned int size)  
    {  
        size = 0;  
        free(P);  
    }  
};  

int test_OverLoad()  
{  
    const CBaseOperator cCo1(100);  

    //判斷+重載符  
    int nSum = cCo1 + 50;  
    printf("%d\n", nSum);  
    nSum = 50 + cCo1;  
    printf("%d\n", nSum);  

    //這里順便檢測(cè)一下拷貝構(gòu)造函數(shù)  
    CBaseOperator co2(20);  
    CBaseOperator co3 = co2 + cCo1;  
    nSum = co3.nData;  
    printf("%d\n", nSum);  

    nSum = co3 + 60;  
    printf("%d\n", nSum);  

    //檢測(cè)+,和=操作符  
    co3 = 10 + cCo1 + co2 + 20;  
    nSum = co3.nData;  
    printf("%d\n", nSum);  

    //查看比較操作符  
    if (cCo1 == cCo1 && cCo1 == 100 && 100 == cCo1)  
    {  
        printf("True\n");  
    }  
    co3 = co2;  
    if (!(co3 != co2))  
    {  
        printf("True\n");  
    }  

    //增量操作符,cCo1是不能做這個(gè)操作的,因?yàn)樗浅A?nbsp; 
    nSum = co2.nData;  

    printf("%d\n", nSum);  

    nSum = (co2++).nData;  
    printf("%d\n", nSum);  
    nSum = (++co2).nData;  
    printf("%d\n", nSum);  

    //測(cè)試[],  
    nSum = cCo1[45];  
    printf("%d\n", nSum);  

    //測(cè)試()  
    nSum = cCo1(50);  
    printf("%d\n", nSum);  

    if (cCo1(45, 23))  
    {  
        printf("True\n");  
    }  

    co2 = co3(10,20,30);  
    nSum = co2.nData;  
    printf("%d\n", nSum);  

    //測(cè)試*,這里co2并不是指針哦。只是重載了*的操作符  
    nSum = *co2;  
    printf("%d\n", nSum);  

    //測(cè)試->,這里也一樣。  
    nSum = co2->nData;  
    printf("%d\n", nSum);  

    //測(cè)試new new[] delete,  
    
//這里沒(méi)有測(cè)試輸出。單步就知道了。  
    CBaseOperator* pCb1 = new CBaseOperator();  
    CBaseOperator* pCb2 = new CBaseOperator[10];  
    delete pCb1;  
    delete pCb2;  
    system("pause");  
    return 0;  

posted on 2013-03-07 11:07 chenjt3533 閱讀(214) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品成人| 一区二区三区欧美在线| 99伊人成综合| 亚洲午夜在线观看| 一区二区三区四区蜜桃| 亚洲影院免费| 性久久久久久| 老色批av在线精品| 亚洲国产99精品国自产| 亚洲国产精选| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美电影在线播放| 亚洲日韩成人| 免费在线观看日韩欧美| 欧美国产日本韩| 日韩一级在线观看| 欧美亚洲在线观看| 免费在线一区二区| 国产精品豆花视频| 国产一区二区三区最好精华液| 亚洲国产欧美日韩精品| 亚洲尤物精选| 免费在线亚洲| 在线亚洲欧美| 免费不卡亚洲欧美| 国产精品一区二区三区乱码| 亚洲第一精品夜夜躁人人爽| 亚洲小视频在线| 免费成人高清| 亚洲一区二区三区涩| 免费影视亚洲| 国内一区二区三区| 亚洲午夜激情网站| 亚洲国产精品久久久久秋霞不卡| 亚洲一区免费视频| 欧美激情视频一区二区三区在线播放 | 国产精品午夜在线观看| 亚洲第一精品在线| 欧美一二区视频| 91久久久久久久久| 美女啪啪无遮挡免费久久网站| 国产精品视频专区| 亚洲一区二区三区乱码aⅴ| 欧美激情亚洲国产| 久久精品国内一区二区三区| 国产精品久久久久久亚洲调教| 亚洲人成在线观看一区二区| 久久综合久色欧美综合狠狠 | 欧美日韩一级黄| 亚洲精品免费网站| 欧美电影免费观看网站| 久久久久久一区二区| 国产综合色产在线精品| 欧美中文字幕在线观看| 亚洲丝袜av一区| 欧美午夜片在线观看| 一区二区精品| 亚洲精品中文在线| 欧美久久久久久久| 一本色道综合亚洲| 日韩网站免费观看| 欧美日韩亚洲高清| 亚洲一区999| 亚洲一级影院| 国产一区亚洲一区| 99精品久久久| 久久夜色撩人精品| 在线成人免费视频| 欧美激情第4页| 欧美黄色免费网站| 99re成人精品视频| 在线视频精品一区| 国产欧美午夜| 久久综合久久美利坚合众国| 麻豆国产精品777777在线| 亚洲经典一区| 亚洲美女视频网| 国产精品一区久久| 久久尤物电影视频在线观看| 噜噜噜在线观看免费视频日韩| 91久久香蕉国产日韩欧美9色| 亚洲精品视频在线播放| 国产精品一区二区三区四区五区| 久久嫩草精品久久久久| 欧美v亚洲v综合ⅴ国产v| 亚洲午夜精品一区二区| 亚洲女人天堂av| 亚洲国产日韩美| 日韩一区二区久久| 国产有码在线一区二区视频| 欧美成人激情视频免费观看| 欧美新色视频| 免费观看不卡av| 国产精品国内视频| 美乳少妇欧美精品| 国产精品扒开腿爽爽爽视频| 久久综合九色综合久99| 欧美视频免费| 欧美国产成人精品| 国产精品入口| 亚洲人成亚洲人成在线观看| 国产欧美日本一区二区三区| 亚洲福利视频三区| 国产日韩高清一区二区三区在线| 欧美激情国产日韩| 国产精品一区二区三区观看| 亚洲国产欧美在线| 国产一区二区三区在线免费观看 | 欧美一区高清| 欧美精品七区| 美女脱光内衣内裤视频久久影院 | 性欧美暴力猛交另类hd| 你懂的国产精品永久在线| 欧美一级网站| 欧美日韩久久不卡| 欧美国产一区二区三区激情无套| 国产麻豆日韩| 99在线热播精品免费| 亚洲日本黄色| 久久婷婷成人综合色| 欧美一区午夜精品| 亚洲欧洲日韩在线| 亚洲一区二区三区成人在线视频精品 | 欧美黄污视频| 国模精品一区二区三区| 亚洲欧美日韩电影| 亚洲一区日韩在线| 欧美日韩免费一区| 日韩午夜激情| 中文在线资源观看网站视频免费不卡| 美女国产一区| 欧美国产专区| 亚洲精品一区中文| 欧美成人官网二区| 欧美激情久久久久久| 在线观看欧美精品| 久久久久欧美精品| 欧美顶级大胆免费视频| 亚洲国产欧美在线| 欧美黄色成人网| 亚洲美女视频| 午夜在线精品| 国产一区二区久久| 久久久久久久久综合| 欧美国产综合视频| 日韩特黄影片| 国产精品人人做人人爽人人添| 亚洲综合视频一区| 久久精品主播| 亚洲高清在线精品| 欧美激情视频一区二区三区在线播放| 亚洲精品国精品久久99热| 亚洲视频在线观看网站| 国产精品红桃| 久久免费视频这里只有精品| 欧美高清视频www夜色资源网| 91久久国产综合久久| 欧美日韩国产二区| 亚洲主播在线| 噜噜噜噜噜久久久久久91| 亚洲欧洲综合| 国产精品视频观看| 久热国产精品| 亚洲视频在线视频| 看欧美日韩国产| 亚洲婷婷综合久久一本伊一区| 国产欧美亚洲一区| 欧美国产日韩免费| 午夜精品网站| 日韩视频不卡中文| 久久一区免费| 亚洲一区二区三区在线| 伊人夜夜躁av伊人久久| 欧美日韩精品系列| 久久久久久国产精品一区| 亚洲美女性视频| 巨乳诱惑日韩免费av| 亚洲欧美成人在线| 91久久精品视频| 国产欧美亚洲精品| 欧美日韩一区二区在线视频| 久久精品国产清自在天天线| 99国产精品久久久| 欧美成人午夜影院| 久久成人精品一区二区三区| 99在线热播精品免费99热| 国产一区久久| 国产精品大片免费观看| 欧美激情在线| 免费欧美日韩| 久久久精品一区二区三区| 国产精品免费看片| 久久综合九色欧美综合狠狠| 亚洲天堂av在线免费| 欧美国产三区| 久久野战av| 亚洲视频一二区| 一区二区高清视频| 亚洲精选成人| 亚洲精品久久|