首页 >后端开发 >C++ >为什么派生类不继承 C 中的构造函数以及如何修复它?

为什么派生类不继承 C 中的构造函数以及如何修复它?

DDD
DDD原创
2025-01-05 08:52:40726浏览

Why Don't Derived Classes Inherit Constructors in C   and How Can We Fix It?

继承构造函数:继承的故事

在提供的代码片段中,我们在尝试使用 B *b = new 初始化 B 类的对象时观察到错误B(5);,尽管基类 A 中存在构造函数。这提出了为什么继承的构造函数在此不可访问的问题case.

理解这个问题的关键在于 C 中复杂的构造函数继承规则。在没有显式构造函数继承的情况下,派生类不会自动从其基类继承构造函数。 C 03 标准就是这种情况。要实现构造函数继承,派生类必须显式使用 using 关键字,如以下更正后的代码所示:

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

class B: public A {
     using A::A;
};

通过添加 using A::A;,B 类现在继承了构造函数A 类,解决错误。需要注意的是,这种继承适用于基类中的所有构造函数,而派生类不能选择性地仅继承某些构造函数。

如果您的编译器支持 C 11 标准,则可以使用构造函数的 using 关键字遗产。然而,在 C 03 标准中,构造函数默认情况下是不被继承的,必须通过调用基构造函数在派生类中手动实现。

对于模板化基类,还可以使用 using 关键字继承构造函数,如本示例所示:

template<class T>
class my_vector : public vector<T> {
    public:
    using vector<T>::vector; ///Takes all vector's constructors
    /* */
};

以上是为什么派生类不继承 C 中的构造函数以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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