我在 C++ 中编写的代码不多,所以如果这是微不足道的,请原谅我。
我的“Foo”类看起来有点像这样:
class Foo {
public: Foo(int n) { }
};
另一个类“Bar”现在应该有一个类型为“Foo”的类成员。
class Bar {
private: Foo f;
};
这显然失败了,因为“Foo”没有不需要任何参数的构造函数。但是,类似的东西也Foo f(1);
失败了。
有没有办法解决这个问题?还是我应该在这里使用指针?
我在 C++ 中编写的代码不多,所以如果这是微不足道的,请原谅我。
我的“Foo”类看起来有点像这样:
class Foo {
public: Foo(int n) { }
};
另一个类“Bar”现在应该有一个类型为“Foo”的类成员。
class Bar {
private: Foo f;
};
这显然失败了,因为“Foo”没有不需要任何参数的构造函数。但是,类似的东西也Foo f(1);
失败了。
有没有办法解决这个问题?还是我应该在这里使用指针?
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) 为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()
};
您可能有一个 Foo 的默认构造函数,或者在类 Bar 中使用 Foo 的指针并稍后设置一个对象。
我想如果您的 Foo 需要一个参数来构造,有两种可能性:
-您的 Bar 将使用静态数字来构造他自己的 Foo(所有 Bar 在 Foo 中都将具有相同的 n) -您的 Bar 将在其中
具有不同的数字会员福。然后,您可以将一个数字传递给 Bar 构造函数,如下所示:
class Bar {
Bar(int n) : Foo(n) { ... } ;
}