首页 > 后端开发 > C++ > 为什么我的派生类不继承我的基类的 C 构造函数?

为什么我的派生类不继承我的基类的 C 构造函数?

Barbara Streisand
发布: 2024-12-21 07:35:10
原创
518 人浏览过

Why Doesn't My Derived Class Inherit My Base Class's Constructor in C  ?

继承构造函数:一个谜

当构造函数没有按预期继承时,可能会令人费解。考虑以下代码片段:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板