首頁 > 後端開發 > C++ > 如何從 C 中的衍生類別呼叫基底類別的虛函數?

如何從 C 中的衍生類別呼叫基底類別的虛函數?

Barbara Streisand
發布: 2024-12-13 02:28:09
原創
906 人瀏覽過

How Can I Call a Base Class's Virtual Function from a Derived Class in C  ?

儘管在C 中進行了重寫,仍調用基類虛函數

在物件導向程式設計中,派生類別通常會重寫以下虛函數他們的基底類別。但是,可能會出現衍生類別需要存取重寫函數的情況。

考慮以下 C 程式碼:

class Foo {
public:
    int x;

    virtual void printStuff() {
        std::cout << x << std::endl;
    }
};

class Bar : public Foo {
public:
    int y;

    void printStuff() {
        // I would like to call Foo.printStuff() here...
        std::cout << y << std::endl;
    }
};
登入後複製

在上面的範例中,Bar 類別重寫了 printStuff 函數,但可能還需要存取基底版本。

Java 的 super 與 C語法

在 Java 中,super.funcname() 語法允許派生類別呼叫基類方法。然而,C 需要不同的方法。要呼叫重寫的基類函數,請使用以下語法:

class Bar : public Foo {
  // ...

  void printStuff() override {  // help the compiler to check
    Foo::printStuff(); // calls base class' function
  }
};
登入後複製

在此語法中:

  • override 是可選的,但建議幫助編譯器確保正確的重寫。
  • Foo::printStuff() 明確呼叫基底類別的function.

這個明確命名是必要的,因為與 Java 不同,C 允許多重繼承。結果,編譯器需要知道重寫時要呼叫哪個基底類別方法。

使用範例

回到原來的程式碼,下面的修改允許Bar: :printStuff() 存取它自己的資料成員y 和基底資料成員x:

void printStuff() override {
    Foo::printStuff();
    std::cout << y << std::endl;
}
登入後複製

這改進了printStuff 的版本輸出基底類別的x 值,後面跟著衍生類別的 y值,提供所需的功能。

以上是如何從 C 中的衍生類別呼叫基底類別的虛函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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