我在C ++中的编码不多,所以请原谅我,如果这是微不足道的。
我的班级“Foo”看起来有点像这样:
class Foo {
public: Foo(int n) { }
};
另一个类“Bar”现在应该有一个类型为“Foo”的类成员。
class Bar {
private: Foo f;
};
这显然失败了,因为没有“Foo”的构造函数不需要任何参数。但是,像Foo f(1);
这样的东西也失败了。
有什么方法可以解决这个问题吗?或者我应该在这里使用指针?
答案 0 :(得分:6)
class Bar {
public:
Bar():f(0) { }
explicit Bar(int n):f(n) { }
private: Foo f;
};
使用c-tors
编写您自己的initializer-list
,或在c-tor
中编写不带参数的Foo
,或使用pointer
或C++11
你可以写
class Bar {
public:
private: Foo f = Foo(1);
};
答案 1 :(得分:4)
这可以通过两种不同的方式处理。
(1)为class Foo
您可以引入无参数构造函数Foo()
或编辑当前接受默认参数的参数,即Foo(int n = 0)
(2)class Foo
内Bar
的调用构造函数,并带有适当的调整
e.g。
class Bar {
...
Bar() : f(0) {} // (a) pass the argument explicitly
Bar(int n) : f(n) {} // (b) receive argument inside Bar()
};
答案 2 :(得分:0)
你可能有一个Foo的默认构造函数或者在类Bar中使用Foo指针并稍后设置一个对象。
答案 3 :(得分:0)
我想如果你的Foo需要一个论证来构建,那么有两种可能性:
- 您的Bar将使用静态数字来构建他自己的Foo(所有Bar将在Foo中具有相同的n)
- 您的酒吧将在其成员Foo中拥有不同的数字。然后,您可以按如下方式将数字传递给Bar构造函数:
class Bar {
Bar(int n) : Foo(n) { ... } ;
}