0

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

4

1 回答 1

3

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

子类型不应与从面向对象语言中继承的(类或对象)概念相混淆;1子类型是类型(面向对象术语中的接口)之间的关系,而继承是源于允许从现有对象创建新对象的语言特性的实现之间的关系。

因此,这里将是没有继承的 subtying的示例:

  • typedef int myint;创建 的完美子 类型 myintint
  • enum mybool { myfalse=0, mytrue=1, mymorethantrue=10 };创建 的子类型myboolint我可以提供mybool给任何期望int. 但是,我无法执行一些基本运算符。所以它不是一个完美的子类型,也不是最好的例子。
  • struct test { unsigned mytmp : 4; };成员mytmp中是一个完美的子类型int。我可以对带有 的整数做任何事情mytmp,但它的值是有限的。

有了这个定义,也很容易找到没有子类型的继承示例:

class Parent {};
class Child :  private Parent {}; 

这里Child显然继承自Parent. 但是,为管理 a 编写的代码Parent将无法使用Child(无法替代),因为它是私有继承的。

备注:在实践中,许多人倾向于将类型理解为类,将子类型理解为派生类。但是,C++ 标准确实在基本类型和被视为复合类型的类之间有所不同。而Liskov 替代原则的实施需要更深入地思考这两个相似但不相同的原则。

于 2015-02-17T20:01:07.683 回答