Стандарт кодирования JSF C ++ ВВС США требует, чтобы виртуальный базовый класс был объявлен для каждого производного класса, который обращается к виртуальной базе.
Например, в следующей иерархии:
A
/ \
B1 B2
C1 C2
\ /
D
… правило, которое они накладывают в этом стандарте (правило AV 88.1, для справки), требует, чтобы классы были объявлены следующим образом:
class A;
class B1 : virtual A;
class B2 : virtual A;
class C1 : B1, virtual A;
class C2 : B2, virtual A;
class D : C1, C2, virtual A;
Мои вопросы следующие:
virtual A
при каждом последующем объявлении класса?Это семантически идентично, так как каждый производный класс будет иметь точно один виртуальная база типа A
, Явное упоминание виртуальной базы довольно неплохо, потому что самый производный класс создает виртуальную базу (в отличие от того, что происходит с не виртуальными базами), и порядок построения важно помнить при написании конструкторов производных классов.
У меня нет технического ответа для (2). Вам не нужно это делать, но было бы неплохо, если бы вы это сделали. Как будто звоню своим родителям, я полагаю. Как и во многих вещах, C ++ не заставляет вас быть разумным.
Других решений пока нет …