2012-10-15 139 views
1

我的问题如下:假设我有:C++ - 初始化类成员与实例

class Foo 
{ 
public: 
    Foo() {} 
    void setInt(int i) { myInt = i; } 
    int getInt() { return myInt; } 
private: 
    int myInt; 
}; 

class Bar 
{ 
public: 
    Bar(Foo f) { /* do something with f.getInt() */ } 
}; 

现在我有了酒吧作为vairable成员另一个类:

​​

我想编写BarUser的构造函数,但是我想用一个Foo成员初始化Bar,该成员的整数为3。即:

Foo f; 
f.setInt(3); 
Bar b(f); 

但是因为我有酒吧作为一个类的成员,我不能写这段代码在初始化列表...我的意思是:

BarUser::BarUser() : bar(/* Foo after executing f.setInt(3) */) 
{ ... } 

假设赋值运算符是不允许的对于Bar - 我如何按预期初始化它?

谢谢!

回答

0

如果你不能改变Foo,写一个函数:

Foo make_foo(int i) { 
    Foo f; 
    f.setInt(i); 
    return f; 
} 

然后用bar(make_foo(3))初始化。

你可以通过给构造函数Foo构造函数,但没有int构造函数,在脚下自射。你可能会更好的explicit构造函数Foo需要int

+0

这有帮助,谢谢! – user1011201