Хранимые процедуры: - SP:StmtStarting - SP:StmtCompleted
Из общего понимания наследования, «частное наследование» C ++ - ужасное неправильное название: это не наследование (что касается всего, что находится за пределами класса) но полная деталь реализации класса.
Если смотреть снаружи, частное наследование на самом деле почти то же самое, что и композиция. Только внутри класса вы получаете специальный синтаксис, который больше напоминает наследование, чем композицию.
Однако есть предостережение: C ++ синтаксически трактует это как наследование со всеми вытекающими из этого преимуществами и проблемами, такими как ] видимость и доступность области . Более того, приведение типов в стиле C (но без преобразования в C ++!) Фактически игнорирует видимость и, таким образом, преуспевает в приведении указателя Derived
к Base
:
Открытое наследование означает, что все знают, что Derived является производным от Base.
Защищенное наследование означает, что только Derived, друзья Derived и классы, производные от Derived, знают, что Derived является производным от Base. *
Частное наследование означает, что только Derived и друзья Derived знают, что Derived является производным от Base.
Поскольку вы использовали частное наследование, ваша функция main () не имеет представления о производном от base, следовательно, не может назначить указатель.
Частное наследование обычно используется для выполнения отношения «реализовано в терминах». Одним из примеров может быть то, что Base предоставляет виртуальную функцию, которую вам нужно переопределить - и, следовательно, она должна быть унаследована - но вы не хотите, чтобы клиенты знали, что у вас есть это отношение наследования.
* также:
Если вы наследуете частным образом любой код, требующий преобразование из Derived * в Base * должно быть членом или другом класса Derived.
Поскольку частный
означает «деталь реализации», что делает тот факт, что Производный
происходит от Base
, деталью реализации.
Частное наследование - это не наследование интерфейса, а наследование реализации. Он не реализует отношения «Is-A», а отношения «Is-Implemented-Using». Производный
не является Базой
с точки зрения пользователей классов, он просто (в настоящее время) реализуется с его использованием.
При частном наследовании вы теряете возможность рассматривать производный объект как объект базового класса.