Диаграмма наследования выглядит следующим образом:
Base1 Base2 Base3
\ | /
\ | /
\ | /
\ | /
Derived
Нет однозначной функции Derived::func1()
.Более того, ключевое слово virtual
- это красная сельдь, потому что Derived
на самом деле ничего не перекрывает.Так что единственный вопрос - как вызывать различные базовые функции.Вот как:
Derived x;
// x.func1(); // Error: no unambiguous base function
x.Base1::func1();
x.Base2::func1();
x.Base3::func1();
История была бы совершенно иной, если бы вы на самом деле переопределили func1()
в Derived
.