我的问题如下:假设我有:
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不允许赋值运算符 - 如何按预期对其进行初始化?
谢谢!
答案 0 :(得分:0)
如果您无法更改Foo
,请编写一个函数:
Foo make_foo(int i) {
Foo f;
f.setInt(i);
return f;
}
然后使用bar(make_foo(3))
初始化。
通过给Foo
一个构造函数而不是int
构造函数,你可以自己解决问题。您可能最好将explicit
构造函数添加到Foo
int
。