Использование виртуального наследования для «конечных» классов в незаконченных иерархиях классов - PullRequest
3 голосов
/ 01 июня 2011

Есть ли какой-либо вред или считается плохим замыслом превентивно выводить классы в незавершенной иерархии классов, которые в настоящее время находятся "внизу" (т. Е. Являются наиболее производными)?Есть ли веская причина, по которой нужно подождать, пока на самом деле не возникнет необходимость в виртуальном наследовании (то есть, когда кто-то решит расширить иерархию, и это приведет к алмазу)?

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Я бы избегал виртуального наследования, пока не понадобится.Когда вы используете виртуальное наследование, вы теряете часть абстракций, которые вы строите на своем классе, и, в частности, как вы инициализируете свой базовый класс, принудительно вызывая виртуальную базу к наиболее производному типу.

2 голосов
/ 01 июня 2011

Это добавляет сложности системе, которая не нуждается в этом.

Когда вы добавляете функциональность или функции в кодовую базу в ожидании будущих потребностей, вы часто упускаете цель.Иногда эта функциональность действительно когда-нибудь понадобится - даже если не сегодня - но во многих случаях этого не будет.В результате получаются большие, сложные классы, которые труднее понять, труднее отлаживать, поддерживать и расширять, и которые могут стоить дороже с точки зрения эффективности.

Принцип KISS существует по причине.Он не дает вашему коду стать машиной Rube Goldberg .

...