gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:40 25 4
gpt4 key购买 nike

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

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 构造函数添加到采用 intFoo

关于C++ - 使用实例初始化类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894873/

25 4 0
文章推荐: c++ - 具体 "getter setter"专用对象
文章推荐: javascript无法获取类的计算样式
文章推荐: javascript -