我的问题如下:假设我有:
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 的构造函数,但是我想用一个整数为 3 的 Foo 成员来初始化 Bar。即:
Foo f;
f.setInt(3);
Bar b(f);
但是因为我有 Bar 作为类成员,我不能在初始化列表中写所有这些代码......我的意思是:
BarUser::BarUser() : bar(/* Foo after executing f.setInt(3) */)
{ ... }
假设 Bar 不允许赋值运算符 - 我如何按预期对其进行初始化?
谢谢!
最佳答案
如果你不能改变Foo
,写一个函数:
Foo make_foo(int i) {
Foo f;
f.setInt(i);
return f;
}
然后用 bar(make_foo(3))
初始化。
您给 Foo
一个构造函数但没有给 int
构造函数有点搬起石头砸自己的脚。您最好将 explicit
构造函数添加到采用 int
的 Foo
。
关于C++ - 使用实例初始化类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894873/