1

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

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

4

2 回答 2

3

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

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

ClassA

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

不要忘记添加Data_Class 静态成员定义,例如dataclass.cpp

static int Data_Class::a = 0;

否则你会得到一个undefined reference链接器错误


您也可以考虑使用单例模式根据评论,单例是个坏主意,如果可能的话应该避免使用),正如Aubin 建议的那样,它将负责添加新的静态成员定义:

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()

或者根据 wiki使用更复杂但更灵活的依赖注入:

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

于 2012-10-28T19:01:07.143 回答
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
};
于 2012-10-28T18:57:45.540 回答