如果另一个类的构造函数需要参数,我如何添加一个类成员?

时间:2012-08-13 08:54:55

标签: c++

我在C ++中的编码不多,所以请原谅我,如果这是微不足道的。

我的班级“Foo”看起来有点像这样:

class Foo {
    public: Foo(int n) { }
};

另一个类“Bar”现在应该有一个类型为“Foo”的类成员。

class Bar {
    private: Foo f;
};

这显然失败了,因为没有“Foo”的构造函数不需要任何参数。但是,像Foo f(1);这样的东西也失败了。

有什么方法可以解决这个问题吗?或者我应该在这里使用指针?

4 个答案:

答案 0 :(得分:6)

class Bar {
public:
    Bar():f(0) { }
    explicit Bar(int n):f(n) { }
    private: Foo f;
};

使用c-tors编写您自己的initializer-list,或在c-tor中编写不带参数的Foo,或使用pointerC++11你可以写

class Bar {
public:
    private: Foo f = Foo(1);
};

答案 1 :(得分:4)

这可以通过两种不同的方式处理。

(1)为class Foo

提供适当的参数构造函数

您可以引入无参数构造函数Foo()或编辑当前接受默认参数的参数,即Foo(int n = 0)

(2)class FooBar的调用构造函数,并带有适当的调整

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) { ... } ;
    }