Предположим, что классы D и E и F наследуют от базового класса B, а класс C наследует от D и E.
(i) Сколько экземпляров класса B отображается в классе C?
(ii) Как использование виртуального наследования изменит этот сценарий? объяснять ваш ответ.
(iii) Как Java избегает необходимости множественного наследования для многих из ситуации, когда в С++ можно использовать множественное наследование?
Вот некоторые из моих текущих идей, но я ни в коем случае не специалист по С++!
(i)
Если C наследует от D и E, которые являются подклассами B, то D и E технически являются копиями их суперкласса? Тогда, если C наследует от D и E, это означает, что в C. есть 2 копии B.
(ii)
Использование virtual несколько похоже на использование Abstract в Java (я думаю). Теперь, учитывая это, это означало бы, что не было бы нескольких копий B в C, поскольку инстанцирование было бы каскадировано до уровня, в котором это необходимо. Я не уверен, как изложить свое объяснение, но сказать, что B имеет функцию print(), которая печатает "i am B", а C переопределяет эту функцию, помещая отпечатки "i am C". Если вы вызываете print() на C без виртуального, вы в конечном итоге печатаете "i am B", использование виртуального означает, что оно будет печатать "i am C".
(iii)
Моя идея здесь в том, что Java может использовать интерфейсы, чтобы избежать использования множественного наследования. Вы можете реализовать несколько интерфейсов, но вы можете расширить только один класс. Я не уверен, что еще добавить здесь, так что любые материалы или соответствующие ресурсы были бы полезны.