У меня есть класс C, который находится в бриллианте с классами Base, A и B. Существует метод Base :: foo(), который переопределяется в обоих классах A и B. Когда я вызываю C :: foo(), Я хочу называть B :: foo(), а не A :: foo().
В одном из решений утверждается, что способ сделать это состоит в том, чтобы сделать A фактически унаследованным от Base и иметь B наследовать нормально. Таким образом, я могу достичь этого без необходимости переопределять C :: foo().
Однако я не нашел никакой другой информации о том, возможно ли это, так как кажется, что и A, и B должны быть объявлены виртуальными, чтобы избежать создания двух копий создаваемой базы.
Является ли предлагаемое решение правильным?
Явным образом определите C::foo()
следующим образом:
C::foo() {
B::foo();
}