跟进 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
是私有(private)的)- 即使可以,
b2Body
部分也不会正确初始化(b2World::CreateBody
需要 被调用)
这是否意味着我永远不能从 b2Body
/b2World
继承并遵循相同的设计模式? (请记住,我无法编辑 b2* 类)
如果是这样,我想你们会建议我只保留 b2World
和 b2Body
作为成员变量?
我认为现在归结为这两个选项:
最佳答案
只有 b2World
可以创建一个 b2Body
所以这不会去任何地方。这些类显然不是为了继承而设计的,所以是的,而是聚合它们。类似
class Body {
public:
Body( b2Body* b ) : b2b( b ) {}
private:
b2Body*const b2b;
};
class World {
public:
World() : b2w( /* create b2w here */ ) {}
Body *CreateBody() {
return new Body( b2w->CreateBody( /*...*/ ); }
}
private:
b2World*const b2w;
};
关于c++ - 不可能从这个对象继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579618/