假设我有这样的代码:
struct Base1 {
virtual void foo() = 0;
};
struct Base2 {
virtual void foo() = 0;
};
struct Derived : Base1, Base2 {
void foo() override {}
};
我正在尝试为具有相同名称/签名的不同基类的多个函数生成单个覆盖。
在c ++中,这是一个压倒一切的合法且定义明确吗?
答案 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;
}