【发布时间】:2016-02-26 10:41:47
【问题描述】:
我想在我的Base 类中包含一个Composed 对象,并且不同的派生类有不同的配置。但是Composed 类在构造函数中需要参数,我无法控制它的架构。
编译器报告错误,因为Composed 的参数应该在Base 类的初始化时传递。但我只希望它在派生类中初始化。这种情况我该怎么办?
class Base{
public:
Base(); //Error
protected:
Composed comp;
};
class Composed{
public:
Composed(int id):id(id);
private:
int id;
};
class Derived_1:public Base{
public:
Derived():comp(1234){};
};
class Derived_2:public Base{
public:
Derived():comp(2345){};
};
【问题讨论】:
-
Base是否应该有一个构造函数?能不能做成纯虚拟的?如果它有一个Composed成员但没有初始化它,那么有没有使用Base对象? -
很有道理!能给个代码示例吗?
-
什么?一个不存在的构造函数?
-
对不起,我忘记了关于 c++ 的一切。如果我删除
Base的构造函数,派生类会报错“没有任何名为'comp'的字段” -
恐怕信息太少了。
标签: c++ inheritance constructor composition