首页 > 后端开发 > C++ > 如何从 C 中的派生类调用基类的虚函数?

如何从 C 中的派生类调用基类的虚函数?

Barbara Streisand
发布: 2024-12-13 02:28:09
原创
845 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板