用于数据存储的静态类

时间:2012-10-28 18:55:06

标签: c++ qt class static

我对C ++语言很陌生。我正在与Qt一起使用它来创建跨平台的用户界面。 用户界面将使用相同的数据显示不同的图形和图表。因此,我希望将我的数据存储在可从所有其他类访问的类(Data_Class)中。 在数据类中,我使用私有静态变量和公共静态方法(get / set)。

我不清楚如何从其他类访问数据类。换句话说,如何在Class_A(到Data_Class)中将数据值写入Class_B(来自Data_Class)。

2 个答案:

答案 0 :(得分:3)

假设这是一个面向语法的问题:

class Data_Class {
public:
    static int a;
    static int GetA() const { return a; }
}

ClassA

Data_Class::a;
Data_Class::GetA();

不要忘记将Data_Class static members definitions添加到dataclass.cpp中:

static int Data_Class::a = 0;

否则你会得到undefined reference linker error


你也可以考虑使用singleton pattern根据评论,单身是个坏主意,你应该尽可能避免它)作为Aubin suggested,它将负责添加新的静态成员定义:

class Data_Class {
private:
    Data_Class();  // Prevents multiple instances

    int a;
    int b;

public:
    // Will initialize instance if needed
    static Data_Class &GetInstance(){
       static Data_Class instance;
       return instance;
    }


    int GetA() const {return a;}
};

用法:

Data_Class::GetInstance().GetA()

或者选择更复杂但更灵活的Dependency injection,这是根据wiki:

  

依赖注入是一种允许选择的软件设计模式   在运行时而不是编译时生成的组件。这个可以   例如,可以用作动态加载插件的简单方法   选择测试环境中的模拟对象与实际对象   生产环境。这个软件设计模式注入了   依赖元素(对象或值等)到目的地   通过了解目的地的要求自动。

答案 1 :(得分:1)

鉴于这两个类声明:

class A {
   public:
      static int get_data();
};

class B {
   public:
      static void do_something();
};

您可以像这样从B访问A的方法:

void B::do_something()
{
     int the_data = A::get_data();
     // now do whatever you need to do with that data
};