C++ - 多態(tài)與虛函數(shù)

虛函數(shù)

  • 在類的定義中,前面有 virtural 關(guān)鍵字的成員函數(shù)被稱為虛函數(shù)。
class base{
      virtual int get();
};
int base::get(){}
  • virtual 關(guān)鍵字只用在類定義里的函數(shù)聲明中,寫函數(shù)體時(shí)候不用。
  • 構(gòu)造函數(shù)和靜態(tài)成員函數(shù)不能是虛函數(shù)。

多態(tài)的變現(xiàn)形式一

  • 派生類的指針可以賦給基類指針。
  • 通過基類指針調(diào)用基類和派生類中的同名虛函數(shù)時(shí):
    • 若該指針指向一個(gè)基類的對象,那么被調(diào)用時(shí)基類的虛函數(shù);
    • 若該指針指向一個(gè)派生類的對象,那么被調(diào)動(dòng)的是派生類的虛函數(shù)。
      這種機(jī)制就叫做“多態(tài)”。
class CBase{
    public:
        virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
    public:
        virtual void SomeVirtualFunction(){}
};
int main() {
    CDerived ODerived;
    CBase * p = & ODerived;
//調(diào)用哪個(gè)虛函數(shù)取決于p 指向哪種類型的對象,編譯的時(shí)候是不會(huì)知道的,直到運(yùn)行的時(shí)候才會(huì)知道。
    p-> SomeVirtualFunction();
    return ();
}

多態(tài)的表現(xiàn)形式二

  • 派生類的對象可以賦給基類引用
  • 通過基類引用調(diào)用基類和派生類中的同名虛函數(shù)時(shí):
    • 若該引用引用的是一個(gè)基類的對象,那么被調(diào)用時(shí)基類的虛函數(shù);
    • 若該引用引用的是一個(gè)派生類的額對象,那么被調(diào)用的是派生類的虛函數(shù)。
      這種機(jī)制也叫做“多態(tài)”。
class CBase{
    public:
        virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
    public:
        virtaul void SomeVirtualFunction(){}
};
int main(){
     CDerived ODerived;
     CBase & r = ODerived;
//調(diào)用哪個(gè)虛函數(shù)取決于 r 引用哪中類型的對象
    r. SomeVirtualFunction();
    return 0;
}

多態(tài)的作用

在面向?qū)ο蟮某绦蛟O(shè)計(jì)中使用多態(tài),能夠增強(qiáng)程序的可擴(kuò)充性,即程序需要修改或增加功能的時(shí)候,需要改動(dòng)和增加的代碼比較少。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • C++虛函數(shù) C++虛函數(shù)是多態(tài)性實(shí)現(xiàn)的重要方式,當(dāng)某個(gè)虛函數(shù)通過指針或者引用調(diào)用時(shí),編譯器產(chǎn)生的代碼直到運(yùn)行時(shí)才...
    小白將閱讀 1,799評論 4 19
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,663評論 1 51
  • 1. 結(jié)構(gòu)體和共同體的區(qū)別。 定義: 結(jié)構(gòu)體struct:把不同類型的數(shù)據(jù)組合成一個(gè)整體,自定義類型。共同體uni...
    breakfy閱讀 2,269評論 0 22
  • 難得理想的圈子,遇見你,很幸運(yùn)。謝謝!
    慕慕_閱讀 225評論 0 0
  • 霏霏秋雨點(diǎn)擊著 滿腹惆悵的梧桐樹葉 幽靜的小路悠長 我在遙望,遙望秋雨盡處 依舊秋雨茫茫 沒有登上高山 你就不知道...
    泰安左眼皮跳跳閱讀 231評論 0 5

友情鏈接更多精彩內(nèi)容