抽象基类中的静态const变量

时间:2012-12-16 21:37:02

标签: c++ class inheritance abstract-class

我有一个抽象的基类,用于派生一些类。 这些类的一些属性在所有类之间共享,这些属性应该是不可修改的。

为了使所有10个类共享一个变量,我将它变为静态。

class ABC{
public:
  static int *anArray;
  int index;
  static int tot_index;
  virtual void print()=0;
  ABC(){index=tot_index++;};
  virtual ~ABC(){};
};

这很好用,tot_index将包含实例化的类的数量,索引是每个类的唯一标识符。

我遇到的问题是* anArray和派生类的数量是在运行时设置的,在实例化类之后我不想修改这些值。

我很害怕:

1)我应该在哪里设置* anArray值?只是派生类的一些随机的?

2)如果变量应该是不可修改的,那么我应该将它设置为const。但是如果我不知道编译时的值是什么,我该如何将它设置为const?

1 个答案:

答案 0 :(得分:1)

不是使用静态变量,而是有一些模式可以实现这一点。

最简单的实现,尽管不是出于多种原因的最好,但是将共享变量放在单例基类中(参考:GoF Singleton模式)。

另一个更漂亮的解决方案可能是一些工厂模式,比如GoF抽象工厂。

编辑: 另外,对于doc的评论,请参阅:http://www.parashift.com/c++-faq/static-init-order-on-first-use.html

:)