虛函數(shù)和純虛函數(shù)

虛函數(shù)為了重載和多態(tài)的需要岳守,在基類中是有定義的艾杏,即便定義是空,所以子類中可以重寫也可以不寫基類中的此函數(shù)极颓!

純虛函數(shù)在基類中是沒有定義的朱盐,必須在子類中加以實現(xiàn),很像java中的接口函數(shù)菠隆!

虛函數(shù)

引入原因:為了方便使用多態(tài)特性兵琳,我們常常需要在基類中定義虛函數(shù)。

class Cman

{

public:

virtual void Eat(){……};

void Move();

private:

};

class CChild : public CMan

{

public:

virtual void Eat(){……};

private:

};

CMan m_man;

CChild m_child;

CMan *p ;//這才是使用的精髓骇径,如果不定義基類的指針去使用躯肌,沒有太大的意義

p = &m_man ;

p->Eat(); //始終調(diào)用CMan的Eat成員函數(shù),不會調(diào)用 CChild 的

p = &m_child;

p->Eat(); //如果子類實現(xiàn)(覆蓋)了該方法破衔,則始終調(diào)用CChild的Eat函數(shù)

//不會調(diào)用CMan 的 Eat 方法清女;如果子類沒有實現(xiàn)該函數(shù),則調(diào)用CMan的Eat函數(shù)

p->Move(); //子類中沒有該成員函數(shù)晰筛,所以調(diào)用的是基類中的

純虛函數(shù)

引入原因:

1嫡丙、同“虛函數(shù)”;

2读第、在很多情況下迄沫,基類本身生成對象是不合情理的。例如卦方,動物作為一個基類可以派生出老虎羊瘩、孔雀等子類,但動物本身生成對象明顯不合常理盼砍。

純虛函數(shù)就是基類只定義了函數(shù)體尘吗,沒有實現(xiàn)過程,定義方法如: virtual void Eat() = 0; 不要

在cpp中定義浇坐;純虛函數(shù)相當(dāng)于接口睬捶,不能直接實例話,需要派生類來實現(xiàn)函數(shù)定義近刘;

有的人可能在想擒贸,定義這些有什么用啊

臀晃,我覺得很有用,比如你想描述一些事物的屬性給別人介劫,而自己不想去實現(xiàn)徽惋,就可以定義為純虛函數(shù)。說的再透徹一些座韵。比如蓋樓房险绘,你是老板,你給建筑公司描述清楚你的樓房的特性誉碴,多少層宦棺,樓頂要有個花園什么的,建筑公司就可以按照你的方法去實現(xiàn)了黔帕,如果你不說清楚這些代咸,可能建筑公司不太了解你需要樓房的特性。用純需函數(shù)就可以很好的分工合作了

虛函數(shù)和純虛函數(shù)區(qū)別

觀點一:

類里聲明為虛函數(shù)的話,這個函數(shù)是實現(xiàn)的成黄,哪怕是空實現(xiàn)呐芥,它的作用就是為了能讓這個函數(shù)在它的子類里面可以被重載,這樣的話慨默,這樣編譯器就可以使用后期綁定來達到多態(tài)了

純虛函數(shù)只是一個接口贩耐,是個函數(shù)的聲明而已弧腥,它要留到子類里去實現(xiàn)厦取。

class A{

protected:

void foo();//普通類函數(shù)

virtual void foo1();//虛函數(shù)

virtual void foo2() = 0;//純虛函數(shù)

}

觀點二:

虛函數(shù)在子類里面也可以不重載的;但純虛必須在子類去實現(xiàn)管搪,這就像Java的接口一樣虾攻。通常我們把很多函數(shù)加上virtual,是一個好的習(xí)慣更鲁,雖然犧牲了一些性能霎箍,但是增加了面向?qū)ο蟮亩鄳B(tài)性,因為你很難預(yù)料到父類里面的這個函數(shù)不在子類里面不去修改它的實現(xiàn)

觀點三:

虛函數(shù)的類用于“實作繼承”澡为,繼承接口的同時也繼承了父類的實現(xiàn)漂坏。當(dāng)然我們也可以完成自己的實現(xiàn)。純虛函數(shù)的類用于“介面繼承”媒至,主要用于通信協(xié)議方面顶别。關(guān)注的是接口的統(tǒng)一性,實現(xiàn)由子類完成拒啰。一般來說驯绎,介面類中只有純虛函數(shù)的。

觀點四:

帶純虛函數(shù)的類叫虛基類谋旦,這種基類不能直接生成對象剩失,而只有被繼承屈尼,并重寫其虛函數(shù)后,才能使用拴孤。這樣的類也叫抽象類脾歧。

虛函數(shù)是為了繼承接口和默認行為

純虛函數(shù)只是繼承接口,行為必須重新定義

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乞巧,一起剝皮案震驚了整個濱河市涨椒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绽媒,老刑警劉巖蚕冬,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異是辕,居然都是意外死亡囤热,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門获三,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旁蔼,“玉大人,你說我怎么就攤上這事疙教」琢模” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵贞谓,是天一觀的道長限佩。 經(jīng)常有香客問我,道長裸弦,這世上最難降的妖魔是什么祟同? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮理疙,結(jié)果婚禮上晕城,老公的妹妹穿的比我還像新娘。我一直安慰自己窖贤,他們只是感情好砖顷,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赃梧,像睡著了一般滤蝠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上槽奕,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天几睛,我揣著相機與錄音,去河邊找鬼粤攒。 笑死所森,一個胖子當(dāng)著我的面吹牛囱持,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焕济,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼纷妆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晴弃?” 一聲冷哼從身側(cè)響起掩幢,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎上鞠,沒想到半個月后际邻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡芍阎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年世曾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谴咸。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡轮听,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岭佳,到底是詐尸還是另有隱情血巍,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布珊随,位于F島的核電站述寡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏玫恳。R本人自食惡果不足惜辨赐,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一优俘、第九天 我趴在偏房一處隱蔽的房頂上張望京办。 院中可真熱鬧,春花似錦帆焕、人聲如沸惭婿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财饥。三九已至,卻和暖如春折晦,著一層夾襖步出監(jiān)牢的瞬間钥星,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工满着, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谦炒,地道東北人贯莺。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像宁改,于是被迫代替她去往敵國和親缕探。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 虛函數(shù)為了重載和多態(tài)的需要还蹲,在基類中是有定義的爹耗,即便定義是空,所以子類中可以重寫也可以不寫基類中的此函數(shù)谜喊!純虛函數(shù)...
    樹林里的小怪獸閱讀 1,505評論 0 0
  • 參考來源:知乎 定義一個函數(shù)為虛函數(shù)潭兽,不代表函數(shù)為不被實現(xiàn)的函數(shù)。定義他為虛函數(shù)是為了允許用基類的指針來調(diào)用子類的...
    夜幕青雨閱讀 844評論 0 6
  • 虛函數(shù)為了重載和多態(tài)的需要斗遏,在基類中是由定義的讼溺,即便定義是空,所以子類中可以重寫也可以不寫基類中的函數(shù)最易! 純虛函數(shù)...
    天涯_DHY閱讀 264評論 0 0
  • 繼承和多態(tài) 1. 繼承的優(yōu)缺點 優(yōu)點:(1)子類可以靈活地改變父類中的已有方法怒坯;(2)能夠最大限度的實現(xiàn)代碼重用。...
    MinoyJet閱讀 620評論 0 0
  • 01 一陣緊一陣的風(fēng)藻懒,吹落滿地梧桐葉剔猿,才讓人感知到這座江南小城的秋味。 小城地處東南沿海嬉荆,溫暖濕潤归敬,氣候宜人。夏季...
    見伊閱讀 2,785評論 178 133