为什么这段代码:
class A
{
public:
explicit A(int x) {}
};
class B: public A
{
};
int main(void)
{
B *b = new B(5);
delete b;
}
导致这些错误:
main.cpp:在函数“int main()”中:
main.cpp:13:错误:没有匹配的函数调用'B::B(int)'
main.cpp:8:注意:候选人是:B::B()
main.cpp:8: 注意:B::B(const B&)
B不应该继承A的构造函数吗?
(这是使用 gcc)
原文由 Sydius 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您的编译器支持 C++11 标准,则存在使用
using
的构造函数继承(双关语)。有关更多信息,请参阅 Wikipedia C++11 文章。你写:这是全有或全无 - 你不能只继承一些构造函数,如果你写这个,你继承所有的。要仅继承选定的那些,您需要手动编写各个构造函数并根据需要从它们调用基本构造函数。
从历史上看,构造函数不能在 C++03 标准中继承。您需要通过自己调用基本实现来手动继承它们。
对于模板化基类,请参考以下示例: