【发布时间】:2020-04-20 11:33:02
【问题描述】:
我正在尝试实现享元模式,但我不太确定继承是如何工作的,所以我不太确定这种模式是如何工作的。
假设我有一个超类,它包含所有“重”信息 - 纹理等,内在信息(永远不会改变的信息)。
class Block{
public: //for the sake of the example
Texture tex;
etc.
};
我的灯光类的数据会发生变化:
class Block_light : public Block {
public:
int posX, posY, posZ;
int color;
etc.
};
那么,如果我在 main 中创建 n Block_light,我会同时创建 n Block 还是将它们都绑定到一个实例?
int main(){
std::vector<Block_light> blocks(n);
return 0;
};
我创建了 n Block_light 和 1 Block 还是 n Block_light 和 n Block?如果是后者,我怎样才能让它只使用一个实例?
【问题讨论】:
-
在您的示例中,
Block和Block_light之间没有关系。如果Block_light继承自Block,您将创建n。 -
是的,一个错字。那么,我该如何让它只创建 1 个区块?
-
由于不能继承。每个
Block_light对象也是一个Block对象。 -
不要让它继承。继承将使子类足够大以包含超类的对象。在
Block_light中可能应该有一个引用/指针/shared_ptr到Block。什么最合适在很大程度上取决于您的用例。 (注意静态变量,由于隐式线程检查,它们会产生运行时开销)
标签: c++ inheritance design-patterns subclass superclass