首頁 >後端開發 >C++ >C 中的純虛擬函數可以實現嗎?

C 中的純虛擬函數可以實現嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-18 04:11:09713瀏覽

Can Pure Virtual Functions in C   Have Implementations, and Why Would You Do That?

純虛函數:實作與目的

在C 中,純虛函數通常與宣告方法的介面而不提供其實作相關聯。但是,可以有一個帶有實現的純虛函數,如下所示:

class A {
public:
    virtual void f() = 0;
};

void A::f() {
    cout << "Test" << endl;
}

雖然此程式碼在語法上是有效的,但其目的和用法需要進一步解釋。

提供純虛函數實作的目的:

基底類別可以定義純虛函數的實作函數,即使衍生類別需要提供它們自己的實作。此實作的目的可以是:

  • 預設行為: 提供衍生類別可以繼承的預設行為。但是,衍生類別必須明確呼叫 A::f() 才能利用此預設行為。
  • 通用功能: 定義可由所有衍生類別重用的一組通用功能。透過在基底類別中提供實現,衍生類別可以選擇呼叫此通用功能及其自己的自訂。

如何呼叫基底類別實作:

衍生類別可以使用全範圍呼叫純虛函數的基底類別實作名稱:

class B : public A {

    virtual void f() {
        // class B doesn't have anything special to do for f()
        //  so we'll call A's

        // note that A's declaration of f() would have to be public 
        //  or protected to avoid a compile time problem

        A::f();
    }

};

用例:

考慮一個方法有合理的預設行為的場景。然而,類別設計者希望僅明確調用此預設行為。在基底類別中提供純虛函數的實作允許衍生類別根據需要存取和使用此預設行為。

注意:

雖然技術上可以提供純虛函數的實現,這是一種不常見的做法,並且可能會導致混亂。因此,除非有明確且正當的理由,否則一般建議避免這樣做。

以上是C 中的純虛擬函數可以實現嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn