在我班上我有一个这样的私人会员:ISymbolFactory& mSymbolFactory;
然后我有一个SetFactory方法,它有ISymbolFactory&作为参数。
如果我想将mSymbolFactory设置为另一个对象(实现为 singelton ),则只能执行此操作一次。如果我想覆盖membervariable,那么它就不会正确。 它将停留在我设置为此变量的第一个对象上。
成员方法的调用如下:SetFactory(SomeFactory :: GetInstance());
类:
class SymbolParser: public Object {
private:
ISymbolFactory& mSymbolFactory;
public:
SymbolParser();
~SymbolParser();
void SetFactory(ISymbolFactory& symbolFactory);
};
我方法的一部分:
void SymbolParser::SetupSymbolParser(ISymbolFactory& symbolFactory) {
mSymbolFactory = symbolFactory;
.....
}
也许我必须提到构造函数像这样初始化变量(这是我坚持的对象):
SymbolParser::SymbolParser() : mSymbolFactory(JavaFactory::GetInstance()) {}
答案 0 :(得分:2)
如果您希望能够在运行时分配其他内容,请使用指针而不是引用对象。
这样做:
class SymbolParser: public Object {
private:
ISymbolFactory* mSymbolFactory;
public:
SymbolParser();
~SymbolParser();
void SetFactory(ISymbolFactory& symbolFactory);
};
在您的细分中:
void SymbolParser::SetupSymbolParser(ISymbolFactory& symbolFactory) {
mSymbolFactory = &symbolFactory;
.....
}
答案 1 :(得分:0)
Symbolparser(Symbolfactory& symbolFactory): mSymbolFactory(symbolFatory){}
你可以在构造函数中初始化一个引用
答案 2 :(得分:0)
请改用以下代码:
class SymbolParser: public Object {
private:
ISymbolFactory& mSymbolFactory;
public:
SymbolParser(ISymbolFactory& symbolFactory)
: mSymbolFactory(symbolFactory) {}
~SymbolParser();
};