继承构造函数
您提供的代码片段:
class A { public: explicit A(int x) {} }; class B: public A { }; int main(void) { B *b = new B(5); delete b; }
使用 GCC 编译时会产生错误,因为它缺少B(int) 的匹配构造函数。虽然您可能期望 B 继承 A 的构造函数,但 C 中默认情况并非如此。
在 C 11 及更高版本中,引入了名为 构造函数继承 using using 的新功能。通过添加使用 A::A;在类 B 中,您可以显式继承 A 的所有构造函数。
class A { public: explicit A(int x) {} }; class B: public A { using A::A; };
但是,构造函数继承是一个全有或全无的概念。您不能有选择地仅继承某些构造函数。如果您尝试这样做,则需要手动定义所需的构造函数并显式调用每个构造函数的基本构造函数。
在 C 03 及更早版本中,不支持构造函数继承。必须通过在每个派生类构造函数中单独调用基构造函数来手动继承构造函数。
对于模板化基类,您可以使用模板语法来继承所有构造函数。例如:
template<class T> class my_vector : public vector<T> { public: using vector<T>::vector; ///Takes all vector's constructors /* */ };
以上是如何继承 C 中的构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!