基類和派生類,虛函式

2021-07-24 22:26:46 字數 1304 閱讀 1624

基類負責定義在層次關係中所有類共同擁有的成員,而每個派生類定義各自持有的成員。

基類希望它的派生類各自定義適合自身的版本,此時基類就將這些函式宣告成虛函式。

class quote;

派生類必須通過使用類派生列表明確指出它是哪個基類繼承而來。

類派生列表的形式:首先是乙個冒號,後面緊跟以逗號分隔的基類列表,其中每個基類前面有訪問說明符:

class bulk_quote : public quote;

派生類必須在其內部對所有重新定義的虛函式進行宣告。基類中說明了虛函式後,派生類中對應的函式可以不必說明為虛函式。

因為bulk_quote 在派生類列表使用了public關鍵字,因此完全把bulk_quote的物件當成quote的物件來使用。

c++新標準允許派生類顯示地註明它將使用哪個成員函式改寫基類的虛函式,在該函式的形參列表之後增加override關鍵字。

基類的定義

class quote

std::string isbn() const(return bookno;)

virtual double net_price(std::size_t n) const

virtual ~quote()=default;

private:

std::string bookno;

protected:

double price=0.0;

};

類中如果自己定義了建構函式,那麼系統不會自動生成預設建構函式,需要自己定義乙個預設建構函式,語法為建構函式=default;

繼承關係中根節點的類通常都會定義乙個虛析構函式。

動態繫結:可以一定程度忽略相似型別的區別,而以統一的方式使用他們的物件。

實現方式:定義基類的指標或引用。根據指標或引用接受的物件的類別不同,可以用相同的語句形式呼叫不同的虛函式版本。

class a

};class b:public a

};a a;

b b;

a *pa=&a;

pa.f1(1);

pa=&b;

pa.f1(1);

reult: a!       b!

虛函式的作用就是實現「動態聯編」,也就是在程式的執行階段動態地選擇合適的成員函式

和類的靜態成員函式與非類的成員函式相比,虛函式的效率較低

要正確的實現虛函式,只能用乙個基類的指標或者引用來指向派生類物件

基類和派生類的虛函式表

在派生類中,其虛函式表和基類的虛函式表有什相關性嗎?做個試驗看一下 1 派生類重新實現虛函式。檢視其虛函式表和虛函式表中虛函式的位址 includeusing namespace std class base public virtual void fun cout this is base cla...

虛函式 與派生類遮蔽基類函式

class base public virtual void print void cout 10public void print int i cout base iter new dervied iter print 5 基類指標會在基類物件中尋找函式,找到函式名後,判斷引數,沒有乙個引數的,所...

基類和派生類

include include using namespace std class animal class dog public animal class dog public animal這裡的 就是繼承或派生,class cat public animal class item base st...