继承构造函数:一个谜
当构造函数没有按预期继承时,可能会令人费解。考虑以下代码片段:
class A<br>{<pre class="brush:php;toolbar:false">public: explicit A(int x) {}
};
class B: public A
{
};
int main(void)
{
B *b = new B(5); delete b;
}
此代码生成编译错误:
main.cpp:13: error: no matching function for call to ‘B::B(int)’ main.cpp:8: note: candidates are: B::B() main.cpp:8: note: B::B(const B&)
意外地,类B 没有从 A 类继承构造函数。
揭晓解决方案
在 C 03 中,构造函数不会自动继承。要继承构造函数,需要从派生类构造函数手动调用它。然而,在 C 11 的构造函数继承中,这个限制得到了缓解。
利用构造函数继承
在 C 11 中,使用 using 关键字允许继承基类中的所有构造函数。为此,只需将以下行添加到派生类:
using A::A; // Inherits all constructors from class A
通过使用此技术,基类中的所有构造函数都将继承到派生类中。
异常处理
需要注意的是,如果派生类手动定义了构造函数,它不会从基类继承任何构造函数。在这种情况下,必须手动定义所有构造函数,并根据需要显式调用基类构造函数。
模板化基类
对于模板化基类,类似的方法是受雇。要将所有构造函数从模板化基类继承到派生类中,请使用以下语法:
using vector<T>::vector; /// Takes all vector's constructors
此方法可确保基类中的所有构造函数都继承到派生类中。
以上是为什么我的派生类不继承我的基类的 C 构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!