我对 C++ 语言很陌生。我将它与 Qt 一起使用来创建跨平台用户界面。用户界面将使用相同的数据显示不同的图形和绘图。所以我想让我的数据存储在一个类(Data_Class)中,可以从所有其他类访问。在数据类中,我使用私有静态变量和公共静态方法(get/set)。
我不清楚的是如何从其他类访问数据类。换句话说,在我将它们写入 Class_A(到 Data_Class)之后,如何在 Class_B(来自 Data_Class)中获取数据值。
假设这是一个面向语法的问题:
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使用更复杂但更灵活的依赖注入:
依赖注入是一种软件设计模式,它允许在运行时而不是编译时选择组件。例如,这可以用作动态加载插件或选择测试环境中的模拟对象与生产环境中的真实对象的简单方法。该软件设计模式通过了解目的地的需求,自动将相关元素(对象或值等)注入目的地。
鉴于这两个类声明:
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
};