C ++ - 使用实例初始化类成员

时间:2012-10-15 11:41:24

标签: c++ class initialization-list

我的问题如下:假设我有:

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() */ }
};

现在我有另一个让Bar成为vairable成员的类:

class BarUser
{
public:
    BarUser();
private:
    Bar bar;
};

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

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

但是由于我有Bar作为类成员,我无法在初始化列表中编写所有这些代码......我的意思是:

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

假设Bar不允许赋值运算符 - 如何按预期对其进行初始化?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您无法更改Foo,请编写一个函数:

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

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

通过给Foo一个构造函数而不是int构造函数,你可以自己解决问题。您可能最好将explicit构造函数添加到Foo int