【发布时间】:2014-05-15 14:53:05
【问题描述】:
对于一个项目,我正在研究一个存在以下情况的案例。有一个类 foo 在构造时需要一个标识号 x。所以它的构造函数参数看起来像 foo(x)。
现在我想派生一个基于 foo 的类,称为 bar,它将基本上在内部保存两个 foo,而对外部世界则充当单个 foo。我想这样做的方法是使用 bar 的两个构造函数参数 y 和 z,然后在构造函数中生成 foo(y) 和 foo(z)。我希望它很清楚。
我当前的实现类似于:
class bar : public foo {
public:
bar(int y, int z)
{
_foo_ptr_1 = foo::foo(y);
_foo_ptr_2 = foo::foo(z);
};
private:
foo *_foo_ptr_1;
foo *_foo_ptr_2;
};
其中 foo 是一个已经存在的类,类似于:
class foo {
public:
foo(int x) :
_private_var(x) {
};
};
现在,我知道由于 foo 没有带零参数的默认构造函数,这将不起作用。出于几个原因,我不希望向 foo 添加一个零参数的无意义构造函数。有什么好方法可以让这个工作吗?现在我的编译器(Ubuntu下的gcc)给了我以下错误:
error::no 调用 foo::foo() 的匹配函数
尝试解决这个问题的一个快速尝试是替换 bar 的构造函数:
bar(int y, int z) : foo(y)
但这也行不通。
我还没有在网上找到一个可行的解决方案,如果有任何帮助,我将不胜感激。
【问题讨论】:
-
_foo_ptr_1 = foo::foo(y)不是在 C++ 中构造类的方式! -
你确定你的 real 代码中有
foo *_foo_ptr_1;吗?此错误消息在哪里发出? -
在bar的构造函数行发出错误。
-
既然
bar本身就是一个foo,你确定你需要额外的两个foos 吗?也许一个额外的foo就足够了? -
bar需要自己的 ID 吗?在这种情况下,它应该接受一个作为论据。如果不需要ID,为什么要继承foo?
标签: c++ inheritance constructor