• 继承中的构造和析构


    调用原则:

    • 子类对象在创建时会首先调用父类的构造函数
    • 父类构造函数执行完毕后,才会调用子类的构造函数
    • 当父类构造函数有参数时,需要在子类初始化列表(参数列表)中显示调用父类构造函数
    • 析构函数调用顺序和构造函数相反

     

    1.顺序

    1.1          子类创建对象时,先调用父类的构造,然后调用自身构造

    1.2          析构顺序与构造顺序相反

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    class Base
    {
    public:
        Base()
        {
            cout << "Base默认构造函数调用" << endl;
        }
    
        ~Base()
        {
            cout << "Base析构" << endl;
        }
    };
    
    class Son : public Base
    {
    public:
        Son()
        {
            cout << "Son默认构造函数" << endl;
        }
        ~Son()
        {
            cout << "Son析构" << endl;
        }
    };
    void test01()
    {
        Son s;
    }
    
    int main()
    {
        test01();  //父构->子构->子析->父析
        system("Pause");
        return 0;
    }

    结果:

    2.子类是不会继承父类的构造函数和析构函数

    父类没有默认构造函数,子类也不能有

    补充内容,如果父类中没有合适默认构造,那么子类可以利用初始化列表的方式显示的调用父类的其他构造

    class Base2
    {
    public:
        Base2(int a)
        {
            this->m_A = a;
            cout << "Base2有参构造" << endl;
        }
        int m_A;
    };
    class Son2 : public Base2
    {
    public:
        //Son2(){} // 因为父类中没有默认构造函数了 所以会报错
        Son2(int a) : Base2(a) //利用初始化列表的方式 显示调用 传值给父类有参构造
        {
    
        }
    };
    
    void test02()
    {
        Son2 s2(10);
        cout << s2.m_A << endl;
    }

    结果:

  • 相关阅读:
    【IT学习资源】2013.10.30
    【转载】 Bash之read命令
    【书本目录】 -- ABS(advanced bash scripts)
    【转载】vSphere的使用
    【转载】 Linux命令 -- tr 转换字符
    【转载】Oracle的日常监控脚本
    【转载】Nginx基础:6.webcache缓存服务
    大学记忆(3)[三国杀(终)]
    大学记忆(1)[记忆之殇]
    大学记忆(2)[计算机]
  • 原文地址:https://www.cnblogs.com/yifengs/p/15176519.html
Copyright © 2020-2023  润新知