首頁 > 後端開發 > C++ > 重寫或不重寫:在 C 中重寫虛擬函數時是否需要明確聲明「虛擬」?

重寫或不重寫:在 C 中重寫虛擬函數時是否需要明確聲明「虛擬」?

Mary-Kate Olsen
發布: 2024-12-14 22:04:15
原創
246 人瀏覽過

To Override or Not to Override: Is Explicitly Declaring

重寫派生 C 類別中的虛函數:有必要嗎?

C 提供了「virtual」關鍵字來在衍生類別中啟用多態行為。多態性允許不同的類別實現同一功能的不同版本。但是,出現了一個問題:在衍生類別中重寫虛擬函數時是否有必要指定「virtual」?

考慮以下結構體定義:

struct A {
    virtual void hello() = 0;
};
登入後複製

這定義了一個抽象具有純虛函數 hello() 的基類 A。現在,讓我們檢查在衍生類別 B 中重寫此函數的兩種方法:

Approach #1:
struct B : public A {
    virtual void hello() { ... }
};
登入後複製
Approach #2:
struct B : public A {
    void hello() { ... }
};
登入後複製

問題是:這兩種方法之間有什麼區別嗎?

答案:

答案是否定的,這兩種方法之間的行為沒有區別。然而,它們的用法有一個微妙的區別。

  • 方法 #1: 明確指定重寫函數為「虛擬」。如果要重寫衍生類別中的虛擬函數(該虛擬函數可能已在其基底類別之一中聲明為虛函數),則這是必要的。在這種情況下,使用“virtual”可確保函數重寫以多型方式完成。
  • 方法 #2: 不明確將重寫的函數指定為「virtual」。當重寫函數已在基底類別中宣告為 virtual 時,這是有效的。在這種情況下,「virtual」關鍵字被隱式繼承,使得重寫具有多態性。

在提供的範例中,重寫的函數已在基底類別 A 中宣告為 virtual。因此,兩種方法都將導致多態行為。兩種方法之間的選擇取決於您喜歡的程式碼的清晰度和一致性。

以上是重寫或不重寫:在 C 中重寫虛擬函數時是否需要明確聲明「虛擬」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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