частное наследование

Хранимые процедуры: - SP:StmtStarting - SP:StmtCompleted

7
задан laalto 16 October 2009 в 09:07
поделиться

6 ответов

Из общего понимания наследования, «частное наследование» C ++ - ужасное неправильное название: это не наследование (что касается всего, что находится за пределами класса) но полная деталь реализации класса.

Если смотреть снаружи, частное наследование на самом деле почти то же самое, что и композиция. Только внутри класса вы получаете специальный синтаксис, который больше напоминает наследование, чем композицию.

Однако есть предостережение: C ++ синтаксически трактует это как наследование со всеми вытекающими из этого преимуществами и проблемами, такими как ] видимость и доступность области . Более того, приведение типов в стиле C (но без преобразования в C ++!) Фактически игнорирует видимость и, таким образом, преуспевает в приведении указателя Derived к Base :

19
ответ дан 6 December 2019 в 04:51
поделиться

Открытое наследование означает, что все знают, что Derived является производным от Base.

Защищенное наследование означает, что только Derived, друзья Derived и классы, производные от Derived, знают, что Derived является производным от Base. *

Частное наследование означает, что только Derived и друзья Derived знают, что Derived является производным от Base.

Поскольку вы использовали частное наследование, ваша функция main () не имеет представления о производном от base, следовательно, не может назначить указатель.

Частное наследование обычно используется для выполнения отношения «реализовано в терминах». Одним из примеров может быть то, что Base предоставляет виртуальную функцию, которую вам нужно переопределить - и, следовательно, она должна быть унаследована - но вы не хотите, чтобы клиенты знали, что у вас есть это отношение наследования.

* также:

19
ответ дан 6 December 2019 в 04:51
поделиться

Если вы наследуете частным образом любой код, требующий преобразование из Derived * в Base * должно быть членом или другом класса Derived.

1
ответ дан 6 December 2019 в 04:51
поделиться

Поскольку частный означает «деталь реализации», что делает тот факт, что Производный происходит от Base , деталью реализации.

Частное наследование - это не наследование интерфейса, а наследование реализации. Он не реализует отношения «Is-A», а отношения «Is-Implemented-Using». Производный не является Базой с точки зрения пользователей классов, он просто (в настоящее время) реализуется с его использованием.

9
ответ дан 6 December 2019 в 04:51
поделиться

При частном наследовании вы теряете возможность рассматривать производный объект как объект базового класса.

0
ответ дан 6 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: