有人可以给我一个没有子类型的继承的例子,还有一个没有继承使用C ++的子类型的例子吗?
答案 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
成员int
是mytmp
的完美子类型。我可以使用class Parent {};
class Child : private Parent {};
的整数执行任何操作,但它的值有限。 通过这个定义,在没有子类型化的情况下找到继承的例子也很容易:
Child
此处Parent
显然继承自Parent
。但是,为管理Child
而编写的代码不适用于{{1}}(不可能替代),因为它是私有继承的。
备注: 在实践中,很多人倾向于将类型理解为类和子类型作为派生类。但是,C ++标准确实在基本类型和被视为复合类型的类之间产生了差异。执行Liskov subsitition principle需要更深入地思考这两个相似但不完全相同的原则。