1

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

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 作为成员变量:

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

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

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

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

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

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

谢谢!

4

1 回答 1

0

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

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

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

Foo通过提供构造函数但没有构造函数,您有点自取其辱int。您最好添加一个explicit构造函数来Foo接受int.

于 2012-10-15T11:42:46.447 回答