Когда вы задаете множественное наследование класса Derived_2
(т. Е. Оно происходит от Base
и Derived_1
), вы говорите, что оно наследует функции-члены от обоих базовые классы.
В этом случае это будет означать, что он имеет два (разных) Draw
члена с одинаковыми подписями. Таким образом, чисто виртуальная Draw
функция, полученная из Base
, будет не переопределена той, которая получена из Derived_1
.
Фактически, если вы используете Derived_3* d = new Derived_3();
вместо В вашей первой строке main()
, как было предложено, вы все равно получите ошибку «не удается создать абстрактный класс», плюс еще одну строку в соответствии с «неоднозначным доступом Draw ()».
Ваш комментарий закомментирован line, void Draw() { Derived_1::Draw(); };
в Derived_2
классе делает две вещи: (1) устраняет неоднозначность при любом последующем вызове Draw()
из Derived_2
класса; и (2) он обеспечивает жизнеспособное переопределение чисто виртуальной функции Draw
класса Base
.