美文网首页每天写500字每周500字
[C++11阅读]继承构造函数和委派构造函数

[C++11阅读]继承构造函数和委派构造函数

作者: 凌霄阁2010 | 来源:发表于2020-05-20 00:01 被阅读0次

在我看来C++构造函数已经够复杂了,继承构造和委派构造,包括下一篇要提到的移动构造,使情况变得更复杂,对新手更不友好。
C++11新特性继承构造函数和委派构造函数主要用于比较复杂的类,包含多个成员变量,动辄好几个构造函数的那种类,可以减少构造函数的个数,缩短代码。而移动构造函数是用来提升代码执行效率的,与本篇提到的二者出发点不同,分开两篇讨论。

继承构造函数

简单的说,用一句话可以把基类的构造函数如数继承下来。
有的基类构造函数特别复杂,众所周知,派生类是不会继承基类构造函数的。之前C++有个规则是可以通过using调用基类的成员函数,C++11把它扩展到了构造函数。

struct A
{
    A(int i) {}
    A(double d, int i) {}
    A(float f, int i, const char* c) {}
};
struct B : A
{
    using A::A;  // 继承构造函数
    virtual void ExtraInterface(){}
};

实测g++编译也能过,但会报一句“inheriting constructors only available with -std=c++11”

委派构造函数

就是把公共需要初始化的变量抽出来放在一个构造函数里,称为目标构造函数,其他构造函数在初始化列表中调用目标构造函数,称为委派构造函数。就好比有一个公共的被委托人,其他人委托他去做一些公共的事。目标构造函数可以有多个。
委派构造函数只能在初始化列表中调用目标构造函数,不能在函数体里调用。
值得注意的是,委派构造函数不能在初始化列表里写其他成员变量的初始化了。

class Info
{
public:
    Info() : Info(1, 'a') {}
    Info(int i) : Info(i, 'a') {}
    Info(char e) : Info(1, e) {}
private:
    Info(int i, char e) : type(i), name(e)
    {/* other initialize */ }
    int type;
    char name;
};

实测g++编译也能过,但会报一句“delegating constructors only available with -std=c++11”

相关文章

  • [C++11阅读]继承构造函数和委派构造函数

    在我看来C++构造函数已经够复杂了,继承构造和委派构造,包括下一篇要提到的移动构造,使情况变得更复杂,对新手更不友...

  • ES5 和 ES6 继承比较:

    ES5构造函数和继承: ES6构造函数和继承:

  • Javascript如何实现继承

    构造函数继承 原型构造函数组合继承

  • JS继承方法详解以及优缺点

    前置阅读:理解原型、new、构造函数 构造函数直接实现 问题:通过构造方法继承的子类,可以获取到父类构造函数当中的...

  • c++11 继承构造函数和委托构造函数

    1 继承构造函数 1.1 为什么需要继承构造函数 子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类...

  • 继承中执行顺序讨论

    继承中,子父类的构造函数(构造函数不被继承)1.子类必须调用父类的构造函数(构造函数不被继承)(1)如果没有写调用...

  • JavaScript的构造函数扩展、继承以及封装

    构造函数的扩展 扩展Man构造函数 构造函数的继承 Dog 继承 Pig JavaScript 内置对象的扩展 例...

  • 浅谈javaScript继承

    原型和构造函数 prototype属性对Object添加属性和方法 构造函数实例化过程 原型和继承 简单继承 继承

  • js继承

    1、原型式继承:借助构造函数的原型对象实现继承,即 子构造函数.prototype = 父构造函数.prototy...

  • 继承方法

    构造函数/原型/实例的关系 借助构造函数实现继承 借助原型链实现继承(弥补构造函数实现继承不足) 组合方式(组合原...

网友评论

    本文标题:[C++11阅读]继承构造函数和委派构造函数

    本文链接:https://www.haomeiwen.com/subject/cehiohtx.html