我有点困惑:
如果我有一个基类A和一个扩展了A的类B,那么类型A的变量可以保存类型B的值,反之亦然吗?
如果是,为什么?即使B衍生自A,它们也不完全不同吗?类型安全怎么样?
如果可能的话,使用此功能时我要注意些什么?在性能方面该如何解决?
注意:对不起,如果我问了太多问题,请忽略它们,只寻找那些带有列表装饰点的“标记” :)
另外,这不是我的作业。我是一名业余程序员,并且具有使用OOP编写脚本语言的技能,但是对于使用C ++进行OOP键入我还是比较陌生。
最佳答案
如果您这样做:
B b;
A a = b;
那么您会得到“切片”。
a
仅包含A
的b
部分。但是您可以具有参考/指针:
B b;
A &ra = b;
A *pa = &b;
在这种情况下,
ra
和pa
仅引用/指向实际的B
对象。这是因为公共继承为IS-A关系建模。使用更具描述性的名称更容易理解。将A
和Animal
和B
视为Baboon
。 Baboon
IS-A Animal
因此,通过使用引用/指针,可以将Baboon
视为更通用的Animal
类型。