尽管在 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中文网其他相关文章!