首頁 > 後端開發 > C++ > C 中的虛函數和純虛函數有何不同?

C 中的虛函數和純虛函數有何不同?

Patricia Arquette
發布: 2024-12-22 03:18:12
原創
204 人瀏覽過

What's the Difference Between Virtual and Pure Virtual Functions in C  ?

虛函數與純虛函數

在物件導向程式設計中,虛函數與純虛函數是理解多態性的基本概念。

什麼是虛擬函數?

虛函數是基底類別中允許動態分派的可繼承和可重寫的函數。當對物件呼叫虛擬函數時,運行時系統會根據物件的類型決定要執行的實際函數實現。

範例:

class Base {
public:
    virtual void foo() { std::cout << "Base::foo()" << std::endl; }
};

class Derived : public Base {
public:
    void foo() override { std::cout << "Derived::foo()" << std::endl; }
};
登入後複製

中在這個範例中,基底類別和衍生類別都實作了 foo() 函數。當對 Derived 物件呼叫 foo() 時,它會執行重寫版本,該版本列印「Derived::foo()。」

什麼是純虛函數?

純虛函數,也稱為抽象函數,是基底類別中未定義的虛函數。它充當佔位符,需要衍生類別來實現它。

範例:

class Base {
public:
    virtual void foo() = 0; // pure virtual function
};
登入後複製

此範例將 foo() 宣告為 Base 中的純虛函數班級。衍生類別必須實作此函數才能提供定義。如果不這樣做,衍生類別就會變成抽象類別,無法實例化。

虛函數和純虛函數的區別

  • 虛函數可以被重寫和自定義在派生類中,但它們在基類中有預設實現。
  • 純虛函數在基底類別中沒有實作且必須在衍生類別中實作。
  • 純虛函數強制基底類別是抽象的(即它不能直接實例化)。
  • 虛函數可用於實現多態性,允許不同衍生類別的物件在回應相同的函數呼叫時表現不同。
  • 純虛函數在基底類別和衍生類別之間強制執行契約,確保實作存在於所有非抽象衍生類別。

以上是C 中的虛函數和純虛函數有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板