C++ 类型和 OOP 子类

标签 c++ oop typing

我有点困惑:

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

如果是,为什么?即使 B 是从 A 派生出来的,它们也不完全不同吗?类型安全怎么样?

  • 如果可以的话,使用它时我需要注意什么? 这在性能方面会如何?

注意:抱歉,如果我问了太多问题,请忽略它们并注意那些用列表修饰点“标记”的问题 :) 另外,这不是我的作业。我是一名业余程序员,并且具备使用 OOP 编写脚本语言的技能,但我对在 C++ 中输入 OOP 还比较陌生。

最佳答案

如果你这样做:

B b;
A a = b;

然后你得到“切片”。 a 将仅包含 bA 部分。

但是你可以有引用/指针:

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

在这种情况下,rapa 只是引用/指向真正的B 对象。这是因为公共(public)继承对 IS-A 关系建模。使用更具描述性的名称更容易理解。将 AAnimalB 视为 Baboon。 A Baboon IS-A Animal 因此通过使用引用/指针,您可以将 Baboon 视为更通用的 Animal > 输入。

关于C++ 类型和 OOP 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2814367/

相关文章:

javascript - 什么时候需要在 TypeScript 中声明返回函数类型?

programming-languages - 是否存在具有动态类型甚至弱类型的编译* 编程语言?

c++ - 去偏斜边界框

c++ - 无法在eclipse中链接Opencv静态库(已添加-ldl!)

c++ - 无法从窗口获取 SDL2 事件

javascript - 这个 JavaScript 东西应该是一个对象还是一个单例类?

多态性的 C++ 问题 - 数据被覆盖

c++ - 在现有对象上使用新放置时如何定义对象的内容

javascript - JS : TypeError: Class extends value <ClassName> is not a constructor or null

python - 如何在 Python 中为类型定义别名以进行类型提示