我想全局共享一个类的实例,这样我就可以从我想要的任何源文件中访问该类的成员函数。我对此并不熟悉,所以我想知道最好的方法。对于记录,这是我的程序的一部分,将文本输出到日志窗口,因此输入将来自我的程序中的几乎每个类。这是一些示例代码:
MyClass.h
class MyClass
{
public:
MyClass();
private:
int start, end;
void parse(std::string);
};
MyClass.cpp
#include "myclass.h"
MyClass::MyClass()
{
}
void MyClass::parse(std::string){
// do some stuff here
}
OtherClass1.h
#include "myclass.h"
class OtherClass1
{
public:
OtherClass1();
private:
MyClass someInstance1;
};
OtherClass1.cpp
#include "otherclass1.h"
OtherClass1::OtherClass1()
{
someInstance1.parse("This is a string.")
}
好的,太好了。但现在我希望能够在另一个类中使用相同的someInstance1
实例(即OtherClass2
)。我不想在MyClass someInstance2
中创建OtherClass2
。如何使用我已创建的someInstance1
中的OtherClass1
?
这是我对OtherClass2
的所作所为。我无法使用someInstance1
,因为它是私有的。
OtherClass2.h
#include "myclass.h"
#include "otherclass1.h"
class OtherClass2
{
public:
OtherClass2();
private:
MyClass someInstance2;
};
OtherClass2.cpp
#include "otherclass2.h"
OtherClass2::OtherClass2()
{
someInstance2.parse("This is a string.")
}
我在整个程序中只需要MyClass
的一个实例。有一个更好的方法吗?我总是读到全球任何东西都是不好的做法,但我还应该怎么做呢?
编辑:我在这里回答了问题:https://stackoverflow.com/a/2798624/2574608
答案 0 :(得分:0)
一种选择是让课程MyClass
成为singleton。 Singleton是创作Gang of Four patterns之一。
这是一个天真的C ++ 11实现:
<强> MyClass.h 强>
#include <string>
class MyClass
{
private:
/* private constructor */
MyClass();
int start, end;
public:
/* static method to get a reference to the MyClass instance */
static MyClass& getInstance();
void parse(const std::string& str);
};
<强> MyClass.cpp 强>
#include "MyClass.h"
#include <iostream>
MyClass::MyClass() {}
MyClass& MyClass::getInstance() {
static MyClass instance;
return instance;
}
void MyClass::parse(const std::string& str) {
// do some stuff here
std::cout << __func__ << ": " << str << std::endl;
}
现在,您可以在整个程序中访问MyClass
实例
使用MyClass::getInstance()
:
#include "MyClass.h"
int main() {
MyClass::getInstance().parse("foo");
}
答案 1 :(得分:-1)
有Singleton
个类,但它们就像隐藏的全局变量。我认为你应该把你需要的类(例如在构造函数中)传递给所有需要它的类。