继承构造函数:了解错误和继承规则
尝试从基类继承构造函数而不在派生类中显式重新定义它时类,如提供的代码片段所示,为什么会导致编译错误?
中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中文网其他相关文章!