【问题标题】:overriding virtual function from several base classes覆盖多个基类的虚函数
【发布时间】:2017-09-22 05:33:40
【问题描述】:

假设我有这样的代码:

struct Base1 {
    virtual void foo() = 0;
};

struct Base2 {
    virtual void foo() = 0;
};

struct Derived : Base1, Base2 {
    void foo() override {}
};

我正在尝试为具有相同名称/签名的不同基类的多个函数生成单个覆盖。

在 c++ 中这样的压倒一切的合法和明确定义吗?

【问题讨论】:

标签: c++ standards


【解决方案1】:

在 c++ 中这样的压倒一切的合法和明确定义吗?

是的,只要在派生类中重写虚函数,它就完全合法且定义明确。
如果创建Derived 结构的对象并调用foo 函数,它将调用被覆盖的函数。

编译器总是会从本地到全局范围内搜索被调用的函数。因此,这里编译器将检查 foo 是否在派生作用域中定义,如果未找到,它将检查基本作用域,并且由于您在派生作用域中提供了 foo 的定义,因此编译器不会检查基本作用域。

试试这个代码,你会得到一个更好的主意。 输出将是这是派生的

#include <iostream>
using namespace std;
struct Base1 {
    virtual void foo() {
        cout << "This is base1" << endl;
    }
};

struct Base2 {
    virtual void foo() {
        cout << "This is base2" << endl;
    }
};

struct Derived : Base1, Base2 {
    void foo() {
        cout << "This is derived" << endl;
    }
};

int main() {
    Derived d;
    d.foo();
    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多