Можете ли вы создать наследование без подтипов, используя переполнение стека

Может ли кто-нибудь дать мне пример наследования без подтипа, а также пример подтипа без наследования с использованием C ++?

0

Решение

В соответствии с википедия, подтип, это отношение, когда части программы, написанные для одного типа, работают также для своего подтипа:

Подтип не следует путать с понятием (класс или объект)
наследование от объектно-ориентированных языков;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 ++ делает разницу между фундаментальными типами и классами, которые рассматриваются как составные типы. И исполнение Лисковский принцип требует более глубокого размышления об этих двух похожих, но не идентичных принципах.

2

Другие решения


По вопросам рекламы [email protected]