C++基礎9:函數(shù)秉撇、函數(shù)重載、運算符重載

一.函數(shù)

1.函數(shù)重載,函數(shù)覆蓋琐馆,函數(shù)隱藏三者的區(qū)別规阀,概念

函數(shù)重載:在一個類中,函數(shù)與函數(shù)的函數(shù)名相同瘦麸,參數(shù)類型或者參數(shù)的個數(shù)不同

函數(shù)覆蓋:在基類和派生類中谁撼,基類的函數(shù)必須是虛函數(shù),兩個類中的函數(shù)與函數(shù)的函數(shù)名相同滋饲,參數(shù)類型和個數(shù)也完全相同

函數(shù)隱藏:在基類和派生類中厉碟,基類的函數(shù)必須不是虛函數(shù),兩個類中的函數(shù)與函數(shù)的函數(shù)名相同屠缭,參數(shù)類型和個數(shù)不考慮(相同不相同都無所謂)

2.const成員函數(shù)

如果想在一個函數(shù)中不允許修改(全局)的成員變量值箍鼓,那么可以將該函數(shù)定義為const成員函數(shù),如:

[cpp] 
int i,k;  
void CTestMemCpp::printss() const  
{  
     i=5;  
     k=5;  
}  

上面更改了全局的變量i和k,那么編譯器會報錯呵曹。

二.函數(shù)重載

1.概念

函數(shù)重載指的是函數(shù)的參數(shù)個數(shù)或者某個參數(shù)的類型不同就稱為函數(shù)的重載款咖,如

int fun(int a)  
int fun(float a)  
int fun(int a,double b)  

以上三個函數(shù)就是對函數(shù)fun的重載

2.函數(shù)的默認參數(shù)

函數(shù)的的參數(shù)在聲明的時候也可以進行初始化,初始化之后就可以在使用的時候不需要填寫形參

[cpp] 
void func(int a,int b,int c=5)  
{  
  cout<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;  
}  
[html] view plain copy print?
main  
{  
    fun(1,2);//a:1 b:2 c:5  
    func(1,2,3);//a:1 b:2 c:3  
}  

三.運算符重載

1.概念

c++除了函數(shù)重載還允許重載運算符奄喂,運算符或者說重載后的運算符與類結(jié)合铐殃,產(chǎn)生新的功能

2.為什么使用運算符重載

與類結(jié)合,為了實現(xiàn)類的多態(tài)性

3.聲明定義

返回類型 operator運算符(參數(shù)1砍聊,參數(shù)2背稼。。玻蝌。){}

使用operator關鍵字進行聲明重載運算符

4.前置++和后置++的重載
[cpp] 
class CTestMemCpp  
{  
public:  
    CTestMemCpp(void);  
    ~CTestMemCpp(void);  
      
 int n;  
    //前置++重載  
    int operator++()  
    {  
        n=0;  
        ++n;  
        return n;  
    }  
  
    //后置++重載  
    int operator++(int a)  
    {  
        n=0;  
        int aa=n;  
        ++*this;  
        return aa;  
    }  
};  
[cpp] 
CTestMemCpp *cp=new CTestMemCpp();  
int a=++*cp;  
int b=(*cp)++;  

結(jié)果:a=1 b=0

前置++和后置++重載的時候怎么才能讓編譯器區(qū)分出來呢?為了區(qū)分他們词疼,我們需要在后置++的運算符后添加一個int類型的參數(shù)(int a)俯树,這個參數(shù)沒有任何意義,它也不會傳遞到函數(shù)體中贰盗,它只是operator++()函數(shù)設置的一個信號许饿,該信號提醒編譯器,目前添加了參數(shù)的函數(shù)是一個后置自加的運算符函數(shù)

5.兩個對象相加的+運算符重載
[cpp] 
class CTestMemCpp  
{  
public:  
    CTestMemCpp(void);  
    ~CTestMemCpp(void);  
      
 int n;  
    CTestMemCpp(int a)  
    {  
        n=a;  
    }//對象+重載  
    CTestMemCpp operator+(CTestMemCpp &cp)  
    {  
        return CTestMemCpp(n+cp.n);  
    }  
      
};  
[cpp] 
CTestMemCpp cp1(1),cp2(2),cp3;  
cp3=cp1+cp2;  
int cp3n=cp3.n;  

結(jié)果cp3n=3舵盈;

6.使用operator關鍵字將類的對象轉(zhuǎn)換成int類型

使用方法:operator int()

[cpp] 
class CTestMemCpp  
{  
public:  
    CTestMemCpp(void);  
    ~CTestMemCpp(void);  
      
    int n;  
    CTestMemCpp(int a)  
    {  
        n=a;  
    }  
         //使用operator關鍵字將類的對象轉(zhuǎn)換成int類型     
    operator int()  
    {  
        return n;  
    }  
}  

有3種方式可以得到轉(zhuǎn)換后的結(jié)果

[cpp]
CTestMemCpp cp1(1);  
int a1=int(cp1);  
int a2=(cp1);  
int a3=cp1;  
7.c++運算符大部分都可以重載陋率,但是有些不能重載,如:

.(成員選擇運算符) ::(作用域限定運算符) *(指針運算符) ?: #
上面的五個運算符不能重載秽晚,前三個有特殊意義瓦糟,重載會帶來麻煩,#是預處理標致赴蝇,不是運算符菩浙,?:沒有確定性,重載沒意義

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市劲蜻,隨后出現(xiàn)的幾起案子陆淀,更是在濱河造成了極大的恐慌,老刑警劉巖先嬉,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轧苫,死亡現(xiàn)場離奇詭異,居然都是意外死亡疫蔓,警方通過查閱死者的電腦和手機含懊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳄袍,“玉大人绢要,你說我怎么就攤上這事∞中。” “怎么了重罪?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哀九。 經(jīng)常有香客問我剿配,道長,這世上最難降的妖魔是什么阅束? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任呼胚,我火速辦了婚禮,結(jié)果婚禮上息裸,老公的妹妹穿的比我還像新娘蝇更。我一直安慰自己,他們只是感情好呼盆,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布年扩。 她就那樣靜靜地躺著,像睡著了一般访圃。 火紅的嫁衣襯著肌膚如雪厨幻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天腿时,我揣著相機與錄音况脆,去河邊找鬼。 笑死批糟,一個胖子當著我的面吹牛格了,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跃赚,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笆搓,長吁一口氣:“原來是場噩夢啊……” “哼性湿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起满败,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肤频,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后算墨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宵荒,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年净嘀,在試婚紗的時候發(fā)現(xiàn)自己被綠了报咳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挖藏,死狀恐怖暑刃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膜眠,我是刑警寧澤岩臣,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宵膨,受9級特大地震影響架谎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辟躏,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一谷扣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捎琐,春花似錦会涎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拨黔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绰沥,已是汗流浹背篱蝇。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徽曲,地道東北人零截。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像秃臣,于是被迫代替她去往敵國和親涧衙。 傳聞我的和親對象是個殘疾皇子哪工,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • C++運算符重載-下篇 本章內(nèi)容:1. 運算符重載的概述2. 重載算術(shù)運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 1,440評論 0 49
  • C++運算符重載-上篇 本章內(nèi)容:1. 運算符重載的概述2. 重載算術(shù)運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 2,298評論 0 51
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,517評論 1 51
  • 前言 人生苦多,快來 Kotlin 弧哎,快速學習Kotlin雁比! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評論 9 118
  • 記得上次去水族館撤嫩,巨大的水母(Jelly Fish)漂浮在水里偎捎,身體像透明的傘,在燈光的照射下顯現(xiàn)各種顏色序攘,實在太...
    畫師喬子閱讀 1,421評論 0 2