不那么新的modern C++简要学习笔记 logo 不那么新的modern C++简要学习笔记

编译器支持最低版本要求:

  • GCC: 4.8
  • MSVC: 19.0
  • Clang: 3.3

提案: N2540

C++11引入了一项新特性,称为“继承构造函数”(Inheriting Constructors),允许派生类继承基类的构造函数,从而可以简化派生类的构造函数实现。

当派生类没有自己的构造函数时,可以使用继承构造函数来继承基类的构造函数。例如,考虑下面这个示例:

class Base {
public:
    Base(int x) : m_x(x) {}
private:
    int m_x;
};

class Derived : public Base {
public:
    using Base::Base;
};

这里,派生类Derived继承了基类Base的构造函数。在Derived的定义中,使用了using声明来继承基类的构造函数。这意味着,在使用Derived的构造函数时,可以像使用Base的构造函数一样,传递一个int类型的参数。

例如,我们可以这样创建一个Derived对象:

Derived d(42);

这里,调用的是Base的构造函数,传递了一个int类型的参数42。由于Derived没有自己的构造函数,因此编译器会自动合成一个默认构造函数。

需要注意的是,继承构造函数只能继承基类的构造函数,不能继承其它成员函数。并且,如果基类的构造函数有重载版本,需要使用using声明来显式指定继承哪一个版本的构造函数。

例如,如果Base有一个默认构造函数和一个带两个参数的构造函数:

class Base {
public:
    Base() : m_x(0) {}
    Base(int x) : m_x(x) {}
private:
    int m_x;
};

那么,在Derived中,需要使用using声明来指定继承哪一个版本的构造函数。例如,我们可以这样来继承带一个int类型参数的构造函数:

class Derived : public Base {
public:
    using Base::Base;
};

这样,Derived就继承了Base的带一个int类型参数的构造函数,而不是默认构造函数。

感觉不错,小额赞助一下!
missdeer WeChat Pay

微信扫一扫

missdeer AliPay

支付宝扫一扫

Hosted by Netlify, 本站由 @missdeer 创建,由 Jekyll 于 2024-03-12 生成,感谢 CloudCannon 制作的theme: Edition ,感谢 Let's Encrypt 提供免费的SSL证书服务。本站点采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。© 2017 - 2024