Частное наследство против сдерживания - PullRequest
3 голосов
/ 08 февраля 2012

Объясняя, когда частное наследование должно использоваться вместо содержания, автор этой статьи говорит следующее:

"Нам нужно построить используемоеобъект до или уничтожить его после другого базового подобъекта. Если имеет значение немного более длительное время жизни объекта, нет другого способа получить его, кроме использования наследования "

Если вы хотите, чтобы подобъект A был создан до подобъекта B и разрушенпосле B не было бы достаточно объявить A перед B в классе включения?Другими словами, почему мы не можем использовать сдерживание для достижения того же результата в этом случае?

1 Ответ

8 голосов
/ 08 февраля 2012

Я считаю, что автор говорит о базе подобъектах, а не о прямых подобъектах.То есть вы бы использовали частное наследование, если бы хотели, чтобы какой-то член класса был создан до того, как будут созданы другие базовые классы класса.В этом случае использование частного наследования заставит C ++ инициализировать частный унаследованный базовый класс перед другими базовыми классами, при условии, что вы унаследовали их в правильном порядке.Например, если вы создаете класс Derived, хотите Subobject объект в Derived и наследуете от Base, но вы хотите, чтобы Subobject инициализировался до Base, вы можете написать

class Derived: private Subobject, public Base {

}

И теперь Subobject будет инициализирован до Base.

(Тем не менее, это довольно глупый вариант использования!)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...