Объявление только одного класса публичного виртуального

0

У меня есть класс C, который находится в бриллианте с классами Base, A и B. Существует метод Base :: foo(), который переопределяется в обоих классах A и B. Когда я вызываю C :: foo(), Я хочу называть B :: foo(), а не A :: foo().

В одном из решений утверждается, что способ сделать это состоит в том, чтобы сделать A фактически унаследованным от Base и иметь B наследовать нормально. Таким образом, я могу достичь этого без необходимости переопределять C :: foo().

Однако я не нашел никакой другой информации о том, возможно ли это, так как кажется, что и A, и B должны быть объявлены виртуальными, чтобы избежать создания двух копий создаваемой базы.

Является ли предлагаемое решение правильным?

Теги:
multiple-inheritance

1 ответ

0

Явным образом определите C::foo() следующим образом:

C::foo() {
  B::foo();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню