c++ - b2Body 的派生类或包含 b2Body 对象的类?

标签 c++ inheritance box2d

我目前有一个“WorldObject”类,它包含一个指向其 b2Body 的指针,以及几个方法和变量。

但是让 WorldObject 成为 b2Body 的派生类不是更聪明吗?

处理这类事情的一般方法是什么?始终创建类中最重要对象的派生类,还是只创建一个新对象并为所有对象添加属性?

这些可能性的优缺点是什么?

谢谢。

最佳答案

没有最好的办法。这完全取决于上下文:

  • 有一个指向b2Body 的指针实现了一种组合关系,即一个WorldObject 有一个b2Body

  • 使 WorldObject 派生自 b2Body 实现继承,并且只有当 WorldObjectb2Body< 时才应执行此操作。这意味着原则上您可以使用 WorldObject 对象执行您可以使用 b2Boby 执行的所有操作(以及更多)。

经验法则是选择 preferring composition over inheritance .除非你真的有明显的遗传。

在你的例子中,一个 b2Body是刚体。现在问你一个问题:你的对象是 body 吗?或者你的对象有一个 body ?

更实用:这种设计的好处是将Box2D引擎的选择封装在了你的WorldObject中。如果稍后您使用另一个 API 将软件移植到另一个物理引擎,这可以让您更好地控制影响。如果您改用继承,底层引擎 API 将显着影响您自己软件的设计,并且有一天很难迁移到另一个引擎。

关于c++ - b2Body 的派生类或包含 b2Body 对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391678/

相关文章:

c++ - 部分专用模板的单独实现

oop - 自动将对象扩展到某个继承类

python - 围绕正方形滚动一个圆圈

c++ - 帮助我理解这个简单的 C++ 类定义、构造函数和初始化

c++ - 对 vector 的相同元素进行升序排序

c++ - 引用基类的 constexpr 构造函数因编译器而异

swift - 快速思考 C# 保护访问器的正确方法是什么?

java - 是否可以在 Java 中扩展没有构造函数的类?

box2d 最大多边形顶点

c++ - b2BlockAllocator.cpp 中的 Box2D 崩溃