Я понимаю основы виртуального наследования С++. Однако я смущен тем, где именно мне нужно использовать ключевое слово virtual
со сложной иерархией классов. Например, предположим, что у меня есть следующие классы:
A
/ \
B C
/ \ / \
D E F
\ / \ /
G H
\ /
I
Если я хочу убедиться, что ни один из классов не появляется более одного раза в любом из подклассов, какие базовые классы нужно маркировать virtual
? Все они? Или достаточно использовать его только на тех классах, которые производятся непосредственно из класса, который может иметь несколько экземпляров (т.е. B, C, D, E и F; и G и H (но только с базовым классом E, а не с базовые классы D и F))?