Может ли кто-нибудь дать мне пример наследования без подтипа, а также пример подтипа без наследования с использованием C ++?
В соответствии с википедия, подтип, это отношение, когда части программы, написанные для одного типа, работают также для своего подтипа:
Подтип не следует путать с понятием (класс или объект)
наследование от объектно-ориентированных языков;1 подтип это отношение
между типами (интерфейсы на объектно-ориентированном языке), тогда как
наследование — это отношение между реализациями, вытекающее из
языковая функция, которая позволяет создавать новые объекты из существующих
из них.
Так что здесь были бы примеры субтирование без наследования:
typedef int myint;
создает идеальный подтип myint
из int
, enum mybool { myfalse=0, mytrue=1, mymorethantrue=10 };
создает подтип mybool
из int
, Я могу предоставить mybool
для любых функций, ожидающих int
, Однако я не могу выполнить некоторые основные операторы. Так что это не идеальный подтип и не лучший пример. struct test { unsigned mytmp : 4; };
член mytmp
это идеальный подтип int
, Я могу делать все, что я делаю с целым числом с mytmp
, но это ограничено в ценностях. С этим определением также очень легко найти пример наследование без подтипов:
class Parent {};
class Child : private Parent {};
Вот Child
очевидно, наследует от Parent
, Однако код написан для управления Parent
не будет работать с Child
(невозможно подмену), потому что это частное наследство.
Примечание: на практике многие люди склонны понимать типы как классы, а подтипы как производные классы. Однако это правда, что стандарт C ++ делает разницу между фундаментальными типами и классами, которые рассматриваются как составные типы. И исполнение Лисковский принцип требует более глубокого размышления об этих двух похожих, но не идентичных принципах.