你可以创建继承而无需使用C ++进行子类型化

时间:2015-02-17 19:36:09

标签: c++ inheritance subtyping

有人可以给我一个没有子类型的继承的例子,还有一个没有继承使用C ++的子类型的例子吗?

1 个答案:

答案 0 :(得分:2)

根据wikipedia,子类型,是为一种类型编写的程序部分也适用于其子类型的关系:

  

不应将子类型与(类或对象)的概念混淆   从面向对象语言继承; 1子类型是一种关系   类型之间(面向对象的说法中的接口),而   继承是源自a的实现之间的关系   允许从现有对象创建新对象的语言功能   的。

所以这里将是没有继承的子类型的例子:

  • typedef int myint;创建myint的完美子类型int
  • enum mybool { myfalse=0, mytrue=1, mymorethantrue=10 };创建mybool的子类型int。我可以为期望mybool的任何函数提供int。但是,我无法执行一些基本的操作符。所以它不是一个完美的亚型而不是最好的例子。
  • struct test { unsigned mytmp : 4; }; mytmp成员intmytmp的完美子类型。我可以使用class Parent {}; class Child : private Parent {}; 的整数执行任何操作,但它的值有限。

通过这个定义,在没有子类型化的情况下找到继承的例子也很容易

Child

此处Parent显然继承自Parent。但是,为管理Child而编写的代码不适用于{{1}}(不可能替代),因为它是私有继承的。

备注: 在实践中,很多人倾向于将类型理解为类和子类型作为派生类。但是,C ++标准确实在基本类型和被视为复合类型的类之间产生了差异。执行Liskov subsitition principle需要更深入地思考这两个相似但不完全相同的原则。