首页 >后端开发 >C++ >为什么 C 中的继承构造函数需要在 C 11 之前显式定义?

为什么 C 中的继承构造函数需要在 C 11 之前显式定义?

DDD
DDD原创
2025-01-03 12:49:39305浏览

Why Do Inherited Constructors in C   Require Explicit Definition Before C  11?

继承构造函数:了解错误和继承规则

尝试从基类继承构造函数而不在派生类中显式重新定义它时类,如提供的代码片段所示,为什么会导致编译错误?

中C ,在 C 11 之前,构造函数不被派生类继承。要执行基类的构造函数,必须在派生类的构造函数中显式调用它。这就是给定代码中显示以下错误消息的原因:

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&)

为了继承 C 11 及更高版本中的构造函数,引入了 using 关键字。该关键字可用于集体继承基类的所有构造函数。

class A
{
public:
    explicit A(int x) {}
};

class B: public A
{
    using A::A; // Inherits all constructors of A
};

这种方法允许您通过一行代码继承基类的所有构造函数。但是,需要注意的是,使用此方法无法选择性继承某些构造函数。要实现选择性继承,必须在派生类中手动编写单独的构造函数,根据需要调用基类构造函数。

以上是为什么 C 中的继承构造函数需要在 C 11 之前显式定义?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn