在不同类之间共享静态数据成员,可以创建彼此的实例

时间:2012-01-26 14:04:55

标签: c++ class

我编写了一个类(AbcdBase),它包含几个静态对象,包括地图和一些静态对象,它们充当“辅助工具”,如绘制辅助函数,存储用于制作表的常量的对象等。 / p>

另外我还有其他需要访问这些静态成员的类(DataSample和DoABCD),这就是DoABCD创建了几个DataSample实例。编码的正确方法是什么?让DataSample和DoABCD都是AbcdBase的派生类似乎不是正确的方法(当我这样做时,我会遇到Seg违规)。

class AbcdBase {

private:
    int init();
    int status;

public:

    static SampleAggregator* SampleAggregatorInst;
    static PlotHelper* PlotHelperInst;
    static DataSampleConst* DataSetMap;
    static DataSampleConst::SampleDict* ListOfSamples;
    static std::vector<std::string> ListOfPlots;
    static std::vector<std::string> ListOfRegions;
    static Logger* LoggerInst;

    AbcdBase();
    virtual ~AbcdBase();

    typedef enum {
        A = 1, B = 2, C = 3, D = 4
    } RegionEnum;
    typedef enum {
        MET = 1, ETCONE20 = 2
    } DimensionEnum;

ClassDef(AbcdBase, 1)
};

单身是否是解决此问题的正确方法?因此,只要DataSample或DoABCD需要访问AbcdBase的成员,就会调用instance()函数,该函数返回指向AbcdBase私有实例的指针。我觉得这会使代码混乱很多。

由于

2 个答案:

答案 0 :(得分:1)

  

另外我还有其他需要访问这些静态成员的类(DataSample和DoABCD)

仅仅声明那些静态成员public,就像你所做的那样,然后在任何其他代码中引用它们(包括DataSample或DoABCD中的代码:

class DataSample {
  ...
  int GetFragle(void) {
    return AbcdBase::PlotHelperInst->m_fragle;
  }
  ...
};

答案 1 :(得分:0)

无需做任何事情。

它们已经公开,您可以在任何地方使用AbcdBase :: PlotHelperInst。

顺便说一下,你把它们用作全局变量。你可能有勇气承认它。将他们赶出课堂。