【发布时间】:2009-10-16 18:27:33
【问题描述】:
跟进this question,人们建议我选择“选项 3”,可能看起来像这样:
class b2Body {
private:
b2Body() {}
friend class b2World;
};
class Body : public b2Body {
private:
Body() {}
friend class World;
};
class b2World {
public:
b2Body *CreateBody() {
return new b2Body;
}
};
class World : public b2World {
public:
Body *CreateBody() {
return new Body;
}
};
int main() {
World w;
Body *b = w.CreateBody();
return 0;
}
但是这样做有两个主要问题:
-
Body永远无法构造,即使使用World::CreateBody(因为b2Body是私有的) - 即使可以,
b2Body部分也不会被正确初始化(b2World::CreateBody需要被调用)
这是否意味着我永远无法继承 b2Body/b2World 并遵循相同的设计模式? (请记住,我无法编辑 b2* 类)
如果是这样,我想你们会建议我只保留b2World 和b2Body 作为成员变量吗?
我认为现在归结为这两个选项:
【问题讨论】:
标签: c++ inheritance box2d private-constructor