• 编译器生成“合成默认构造函数'的情况总结


    在以下五种情况下,编译器会生成"合成默认构造函数":

    1.本身没有任何构造函数,但是含有类成员,且该类成员含有默认构造函数。

    2.子类继承父类,且父类含有默认构造函数,但是子类没有任何构造函数。

    3.含有虚函数,且自身没有任何构造函数。

    4.含有虚基类,且自身没有任何构造函数。

    5.定义成员变量的时候赋初值,且自身没有任何构造函数。

    (注:对于含有虚函数和虚基类的类,即使自己定义了构造函数,编译器同样会在开头安插保存虚函数表或者虚基类表的代码)。

    下面举例:

    -------------------------------------------------------------------------------------------------------------------

    1:本身没有任何构造函数,但是含有类成员,且该类成员含有默认构造函数。

    class A
    {

    public:

    A(){}

    };

    class B

    {

    public:

    private:
     A a;

    };

    ------------------------------------------------------------------------------------------------------------

    2.子类继承父类,且父类含有默认构造函数,但是子类没有任何构造函数。

    class A
    {

    public:

    A(){}

    };

    class B:public A{

    public:

    };

    ----------------------------------------------------------------------------------------------------------------

    3.含有虚函数,且自身没有任何构造函数。

    class A

    {

    public:

    virtual void foo();

    };

    -----------------------------------------------------------------------------------------------------------------

    4.含有虚基类,且自身没有任何构造函数。

    class A

    {

    public:

    };

    class B:virtual public A

    {

    public:

    };

    class C:virtual public A

    {

    public:

    };

    class D:public A,public B

    {

    public:

    };

    ------------------------------------------------------------------------------------------------------------------------

    对于情况5,是C++11引入的,比如:

    class A{

    private:

    int x{0};
    };

    ----------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    LeetCode 476 数字的补数
    MySQL与Java 整型数据映射
    TINYINT[M]、INT[M]和BIGINT[M]中M值的意义
    git删除本地分支
    git 初始化项目、创建本地分支、本地分支与远程分支关联
    Java 当文件不存在时自动创建文件目录和文件
    Java 在文件末尾追加内容
    免密自动登陆SAPGui
    SAP GUI770下载及安装
    notepad++格式化json,无法安装json插件
  • 原文地址:https://www.cnblogs.com/SunShine-gzw/p/13571891.html
Copyright © 2020-2023  润新知