Неявно сгенерированный конструктор копирования работает нормально, но если вы хотите явно написать его самостоятельно, он может выглядеть следующим образом:
D(D const &o): A(o), B(o), C(o) {}
E(E const &o): A(o), D(o) {}
В целях инициализации виртуальные базовые классы ведут себя так, как будто они являются прямой базой наиболее производного объекта. Любой инициализатор в подобъекте игнорируется (например, в моем коде для E
инициализация D(o)
фактически не инициализирует A
, несмотря на то, что A
указан в конструкторе копирования D
).
Это то же самое, независимо от того, наследует ли E
виртуально D
.
Ссылка для дальнейшего чтения