我有点困惑:
- 如果我有一个基类 A 和一个扩展 A 的类 B,类型 A 的变量是否可以保存类型 B 的值,反之亦然?
如果是,为什么?即使 B 是从 A 派生出来的,它们也不完全不同吗?类型安全怎么样?
- 如果可以的话,使用它时我需要注意什么? 这在性能方面会如何?
注意:抱歉,如果我问了太多问题,请忽略它们并注意那些用列表修饰点“标记”的问题 :) 另外,这不是我的作业。我是一名业余程序员,并且具备使用 OOP 编写脚本语言的技能,但我对在 C++ 中输入 OOP 还比较陌生。
最佳答案
如果你这样做:
B b;
A a = b;
然后你得到“切片”。 a
将仅包含 b
的 A
部分。
但是你可以有引用/指针:
B b;
A &ra = b;
A *pa = &b;
在这种情况下,ra
和pa
只是引用/指向真正的B
对象。这是因为公共(public)继承对 IS-A 关系建模。使用更具描述性的名称更容易理解。将 A
和 Animal
和 B
视为 Baboon
。 A Baboon
IS-A Animal
因此通过使用引用/指针,您可以将 Baboon
视为更通用的 Animal
> 输入。
关于C++ 类型和 OOP 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2814367/