C++,帮助扩展此类
C++, help extending this class
我要扩展一个C++类,但绝对没有该语言的背景。谷歌搜索并没有帮助我了解如何解决编译错误:
Constructor for 'JRB2World' must explicitly initialize the base class 'b2World' which does not have a default constructor
所以,有这个b2World.h
class b2World
{
public:
b2World(const b2Vec2& gravity);
~b2World();
// ...
它.cpp:
b2World::b2World(const b2Vec2& gravity)
{
// ...
}
b2World::~b2World()
{
// ...
}
我的类标题:
#import "Box2D.h"
class JRB2World : public b2World {
float factor;
public:
JRB2World(const b2Vec2& gravity);
~JRB2World();
float getFactor();
void setFactor(float f);
};
我的类实现:
JRB2World::JRB2World(const b2Vec2& gravity) {
// Constructor for 'JRB2World' must explicitly initialize the base class 'b2World' which does not have a default constructor
}
JRB2World::~JRB2World() {
}
float JRB2World::getFactor(){
return factor;
}
void JRB2World::setFactor(float f){
factor = f;
}
我想这与调用"超级构造函数"有关,就像在java或objc中一样。如何做到这一点?
只需将构造函数放入继承类构造函数的初始值设定项列表中:
JRB2World::JRB2World(const b2Vec2& gravity) : b2World(gravity) {
}
根据你想做什么,我不会在这里使用继承:将Box2D世界放入成员变量中。这应该更容易替换它,以防万一它的接口在版本上发生变化,或者你决定稍后使用另一个物理引擎。
基类没有默认(没有参数)构造函数。在派生类初始化列表中调用它:
JRB2World::JRB2World(const b2Vec2& gravity):b2World(gravity) {
}
在这个
例子中,我更喜欢组合而不是继承。
使用构图,您始终可以选择定义自己的行为,或者简单地暴露您的组合部分。这样,您就不会遇到继承层次结构可能施加的任何限制(虚拟与非虚拟等)。您可能不需要访问新类中的所有 b2World 方法
相关文章:
- 需要帮助设置在C++中使用的Potrace
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 在指针的帮助下,文本文件中单词的频率
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 需要帮助将结构数组传递给函数
- C++中的VLA,扩展名为std=C++11
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++返回 Numpy 数组的 Python 扩展模块
- 扩展可变参数模板中的变量名称
- 扩展C++生成的代码的模板参数类型名称
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- C++,帮助扩展此类
- 如何在CTreeCtrl中获取所选项目的文件类型?文件扩展名可能被隐藏,因此 GetItemText 没有帮助
- 需要帮助将可变宏扩展为字符串化名称和值序列