В комментарии уже было сказано: (publi c) модели наследования - это отношения.
Забудьте на мгновение о C ++ и рассмотрите абстрактную концепцию наследования и то, что он моделирует. Если A
наследуется от B
, то любой экземпляр A
будет B
. Следовательно, набор всех экземпляров A
является подмножеством всех экземпляров B
. Если все экземпляры A
являются экземплярами B
, а все экземпляры B
являются экземплярами A
, то для моделирования отношения между A
и B
не требуется наследование, поскольку они являются точными того же типа.
Теперь снова C ++. Это:
struct A : B {};
struct B : A {};
Невозможно по двум причинам. Во-первых, чтобы сделать A
наследовать от B
, необходимо знать определение B
, а чтобы B
наследовать от A
, необходимо знать определение A
. Во-вторых, каждый экземпляр A
содержит подобъект типа B
, а каждый B
содержит подобъект типа A
и каждый A
.... до бесконечности. Это невозможно.