2

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

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

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

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

class Bar {
    private: Foo f;
};

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

有没有办法解决这个问题?还是我应该在这里使用指针?

4

4 回答 4

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);
};
于 2012-08-13T08:57:40.953 回答
4

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

(1) 为class Foo

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

(2)使用适当的参数调用class Foo内部的构造函数Bar

例如

class Bar {
...
  Bar() : f(0) {}  // (a) pass the argument explicitly 
  Bar(int n) : f(n) {} // (b) receive argument inside Bar()
};
于 2012-08-13T09:00:25.287 回答
0

您可能有一个 Foo 的默认构造函数,或者在类 Bar 中使用 Foo 的指针并稍后设置一个对象。

于 2012-08-13T08:57:17.257 回答
0

我想如果您的 Foo 需要一个参数来构造,有两种可能性:
-您的 Bar 将使用静态数字来构造他自己的 Foo(所有 Bar 在 Foo 中都将具有相同的 n) -您的 Bar 将在其中
具有不同的数字会员福。然后,您可以将一个数字传递给 Bar 构造函数,如下所示:

class Bar {
    Bar(int n) : Foo(n) { ... } ;
    }
于 2012-08-13T09:23:28.550 回答