1

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

为了在所有 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?

4

1 回答 1

1

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

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

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

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

:)

于 2012-12-16T22:21:56.603 回答