zoukankan      html  css  js  c++  java
  • 编译器生成“合成默认构造函数'的情况总结

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

    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};
    };

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

  • 相关阅读:
    获取具有指定扩展数据的所有实体的Id,并存入Id数组中
    FastDFS单机版安装教程
    Git简要开发流程
    Delay延迟队列
    HTTP调用接口方法
    Tomcat为什么要使用Facde模式对Request对象进行包装?
    SpringBoot注解
    <th:>标签使用
    Git命令速查表
    IDEA中对Git的常规操作(合并,提交,新建分支,更新)
  • 原文地址:https://www.cnblogs.com/SunShine-gzw/p/13571891.html
Copyright © 2011-2022 走看看