我对C ++语言很陌生。我正在与Qt一起使用它来创建跨平台的用户界面。 用户界面将使用相同的数据显示不同的图形和图表。因此,我希望将我的数据存储在可从所有其他类访问的类(Data_Class)中。 在数据类中,我使用私有静态变量和公共静态方法(get / set)。
我不清楚如何从其他类访问数据类。换句话说,如何在Class_A(到Data_Class)中将数据值写入Class_B(来自Data_Class)。
答案 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
};