overriding virtual function from several base classes
假设我有这样的代码:
1 2 3 4 5 6 7 8 9 10 11 | struct Base1 { virtual void foo() = 0; }; struct Base2 { virtual void foo() = 0; }; struct Derived : Base1, Base2 { void foo() override {} }; |
我试图为具有相同名称/签名的不同基类的几个函数生成一个重写。
在C++中有这样一个超越法律和明确定义的吗?
Is such an overriding legal and well-defined in c++?
是的,只要您重写派生类中的虚函数,它就完全合法并且定义良好。如果创建
编译器总是从本地到全局范围搜索被调用的函数。因此,在这里,编译器将检查是否在派生范围中定义了
试试这个代码,你会得到一个更好的主意。输出将是这个派生的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #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; } |