我有点困惑:


如果我有一个基类A和一个扩展了A的类B,那么类型A的变量可以保存类型B的值,反之亦然吗?


如果是,为什么?即使B衍生自A,它们也不完全不同吗?类型安全怎么样?


如果可能的话,使用此功能时我要注意些什么?在性能方面该如何解决?


注意:对不起,如果我问了太多问题,请忽略它们,只寻找那些带有列表装饰点的“标记” :)
另外,这不是我的作业。我是一名业余程序员,并且具有使用OOP编写脚本语言的技能,但是对于使用C ++进行OOP键入我还是比较陌生。

最佳答案

如果您这样做:

B b;
A a = b;


那么您会得到“切片”。 a仅包含Ab部分。

但是您可以具有参考/指针:

B b;
A &ra = b;
A *pa = &b;


在这种情况下,rapa仅引用/指向实际的B对象。这是因为公共继承为IS-A关系建模。使用更具描述性的名称更容易理解。将AAnimalB视为BaboonBaboon IS-A Animal因此,通过使用引用/指针,可以将Baboon视为更通用的Animal类型。

10-07 18:58