C++面向對象入門(三十二)虛函數和實現動態聯編的條件


虛函數: 一個成員函數, 該函數在基類的內部聲明並且被派生類重新定義, 為了創建虛函數, 應在基類該函數
聲明的前面加上virtual關鍵字
如果一個類的某個成員函數被說明為虛函數, 意味着該成員在派生類中可能存在不同的實現方式, 當繼承包含
虛函數的類時, 派生類將重新定義該虛函數以符合自身的需要.
動態聯編需要滿足三個條件:
1 類之間滿足兼容賦值規則
2 聲明虛函數
3 使用類的指針或者引用訪問虛函數或者通過成員函數調用虛函數
 
虛函數只能是非靜態成員函數
構造函數能重載, 不能定義為虛函數, 而析構函數不能重載, 但是可以被定義為虛函數
 
代碼示例:

 

#include <iostream>
using namespace std;

/*
虛函數: 一個成員函數, 該函數在基類的內部聲明並且被派生類重新定義, 為了創建虛函數, 應在基類該函數
聲明的前面加上virtual關鍵字
如果一個類的某個成員函數被說明為虛函數, 意味着該成員在派生類中可能存在不同的實現方式, 當繼承包含
虛函數的類時, 派生類將重新定義該虛函數以符合自身的需要.

動態聯編需要滿足三個條件:
1 類之間滿足兼容賦值規則
2 聲明虛函數
3 使用類的指針或者引用訪問虛函數或者通過成員函數調用虛函數

*/
class A49
{
public:
    A49();
    void callVtFunc();
    virtual void vtFunc();
};

class B49 : public A49
{
public:
    B49();
    virtual void vtFunc();
};



int main()
{
    A49 a;
    B49 b;
    a.callVtFunc();
    b.callVtFunc();
    system("pause");
}

A49::A49()
{
}


void A49::callVtFunc()
{
    vtFunc();
}

void A49::vtFunc()
{
    cout << "function of A49" << endl;
}

B49::B49()
{
}



void B49::vtFunc()
{
    cout << "function of B49" << endl;
}

 


免責聲明!

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



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