【发布时间】:2020-04-18 16:13:41
【问题描述】:
现在假设基类包含一些函数,而派生类显然继承自基类...
所以派生类包含来自基类的函数加上它自己的一些额外的函数。因此我们不应该做Base *base = new Derived;,因为派生的函数比基数多,所以指向派生成员的基指针不应该是不可能的,因为它不能调用那些额外的派生函数。另一方面,Derived *derived = new Base 应该被允许,因为派生的指针可以包含来自 base 的所有函数而不会丢失任何数据,对吗?
那么为什么我们可以这样做:Base *base = new Derived;而我们不能做 Derived *derived = new Base ?
【问题讨论】:
-
因为
Base对象不是Derived对象?它没有Derived对象应具有的任何函数或变量 -
“指向派生成员的 bass 指针应该是不可能的,因为它无法调用那些额外的派生函数” - 我看不到问题所在。为什么您无法访问一些可能可能存在的功能?
-
Base *bass = new Derived是有效的,因为Derived是Base。Derived *derived = new Base无效,因为Base不是Derived。对象类别(又名类)之间的“is-a”关系只向一个方向发展——例如,“狗是哺乳动物”始终是正确的陈述,但“哺乳动物是狗”并不总是正确的。除非 A 和 B 是相同的类别,否则没有任何类型的对象“A is-a B”和“B is-a A”都为真。
标签: c++ pointers inheritance