zoukankan      html  css  js  c++  java
  • 【C++】继承时构造函数和析构函数

    1. 顺序

      先调用基类的构造函数,再调用派生类构造函数。析构顺序相反。

    2. 构造函数

      派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数

      派生类 使用初始化列表调用基类带参构造函数->调用基类相关的带参构造函数

      若派生类有多个构造函数版本,其中任意一个基类的构造函数不匹配,都会出错。

    3. 复制构造函数

      派生类 未定义复制构造函数 ->调用基类的复制构造函数(如果有)或默认复制构造函数,和派生类的默认复制构造函数

      派生类 定义了复制构造函数  未使用初始化列表调用基类复制构造函数 -> 调用基类默认构造函数

          派生类 定义了复制构造函数  使用初始化列表调用基类复制构造函数 -> 调用基类复制构造函数(如果有)或默认复制构造函数

    例子:

    #include<iostream>
    using namespace std;
    
    class A
    {
    public:
        A()
        {
            cout << "A 默认构造函数" << endl;
        }
        A(int i)
        {
            cout << "A A(int i)构造函数" << endl;
        }
        ~A()
        {
            cout << "A 析构函数" << endl;
        }
        A(const A & obj)
        {
            cout << "A 复制构造函数" << endl;
        }
    };
    
    class B : public A
    {
    public:
        B()
        {
            cout << "B 默认构造函数" << endl;
        }
        B(int j):A(j)
        {
            cout << "B B(int j):A(j)" << endl;
        }
        ~B()
        {
            cout << "B 析构函数" << endl;
        }
        B(const B & obj)  //调用A的默认构造函数
        {
            cout << "B 复制构造函数" << endl;
        }
        //B(const B & obj):A()  //调用A的默认构造函数
        //{
        //    cout << "B 复制构造函数" << endl;
        //}
        //B(const B & obj):A(obj)  //调用A的复制构造函数
        //{
        //    cout << "B 复制构造函数" << endl;
        //}
    };
    
    int main()
    {
        {
            cout << "----------------------" << endl;
            B b;
            cout << "----------------------" << endl;
            B b1(3);
            cout << "----------------------" << endl;
            B b2(b);
            cout << "----------------------" << endl;
        }
        return 0;
    }

  • 相关阅读:
    Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]
    Bzoj 3126[Usaco2013 Open]Photo 题解
    Bzoj 3165 [Heoi2013]Segment题解
    Bzoj 2733: [HNOI2012]永无乡 数组Splay+启发式合并
    赛前集训前的总结(警醒)
    bzoj3316 JC loves Mkk题解
    9.22考试 crf的军训 题解
    Luogu3521 [POI2011]ROT-Tree Rotations
    CTSC2012 熟悉的文章
    UVA11468 Substring
  • 原文地址:https://www.cnblogs.com/dplearning/p/4785346.html
Copyright © 2011-2022 走看看