覆盖几个基类的虚函数

时间:2017-04-25 09:26:27

标签: c++ standards

假设我有这样的代码:

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

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

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

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

在c ++中,这是一个压倒一切的合法且定义明确吗?

1 个答案:

答案 0 :(得分:2)

  

在c ++中,这是一个压倒一切的合法且定义明确吗?

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

编译器将始终从本地范围到全局范围搜索被​​调用函数。因此,编译器将检查导出范围中是否定义foo,如果未找到它将检查基本范围,并且由于您在派生范围中提供了foo的定义,编译器将赢得' t检查基本范围。

尝试使用此代码,您将获得更好的主意。 输出这是派生的

#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;
}