儘管在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 } };
在此語法中:
這個明確命名是必要的,因為與 Java 不同,C 允許多重繼承。結果,編譯器需要知道重寫時要呼叫哪個基底類別方法。
使用範例
回到原來的程式碼,下面的修改允許Bar: :printStuff() 存取它自己的資料成員y 和基底資料成員x:
void printStuff() override { Foo::printStuff(); std::cout << y << std::endl; }
這改進了printStuff 的版本輸出基底類別的x 值,後面跟著衍生類別的 y值,提供所需的功能。
以上是如何從 C 中的衍生類別呼叫基底類別的虛函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!