C/C++ 虛函數


虛(virtual)函數是為了實現多態,派生類可以覆寫(override)基類的虛函數。

1、多態(polymorphism),即基類指針或者引用,可能指向基類對象,也可能指向派生類對象,會根據運行時具體指向的對象,來調用不同的函數。

2、如果沒有多態,則什么類型的指針或者引用,就會調用什么類型的對象的函數。

class Animal {
public:
    // 編譯時靜態綁定
    void print1() {
        printf("print1 parent class.\n");
    }
    // 虛函數,告訴編譯器,運行時動態綁定。
    virtual void print2() {
        printf("print2 parent class.\n");
    }
   virtual void print3() {
        printf("print3 parent class.\n");
    }
};

class Dog: public Animal {
public:
    void print1() {
        printf("print1 Dog class.\n");
    }
    void print2() {
        printf("print2 Dog class.\n");
    }
};

Animal *pAni;
Dog dog;
pAni = &dog;
pAni->print1();
pAni->print2();
pAni->print3();

輸出:
print1 parent class.
print2 Dog class.
print3 parent class.

3、每個包含虛函數的類(也叫虛類),都有一個虛函數表(簡稱虛表),表項是一個虛函數的地址。

4、如果基類是虛類,則繼承類也是虛類。

5、虛類的對象最前面都是一個虛表指針,指向類的虛表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM