委托构造和继承构造

2022-11-24  本文已影响0人  arkliu

委托构造

委托构造函数就是在一个构造函数的初始化列表中,调用另一个构造函数。

#include <iostream>
#include <string>
using namespace std;

class AA {
    private:
        int m_a;
        int m_b;
        double m_c;
    public:
        AA(double c) {
            m_c = c+3;
            cout <<"AA(double c)"<<endl;
        }
        AA(int a, int b) {
            m_a = a + 1;
            m_b = b + 1;
            cout <<"AA(int a, int b)"<<endl;
        }

        AA(int a, int b, const string& str):AA(a, b) {
            cout <<"m_a = "<<m_a<<"  m_b="<<m_b<<"  str = "<<str<<endl;
        }

        AA(double c, const string& str):AA(c) {
            cout <<"m_c = "<<m_c<<"  str = "<<str<<endl;
        }
};

int main()
{
    AA aa(11,22, "张三");
    AA aa2(4.5, "李思");
}
image.png

继承构造

c11推出了继承构造,在派生类中,使用using来声明继承基类的构造函数。

#include <iostream>
#include <string>
using namespace std;

class AA {
    public:
        int m_a;
        int m_b;
        AA(int a):m_a(a) {
            cout <<"AA(int a)"<<endl;
        }
        AA(int a, int b):m_a(a),m_b(b) {
            cout <<"AA(int a, int b)"<<endl;
        }
};

class BB:public AA {
    public:
        double m_c;
        using AA::AA;//使用基类的构造函数

        // BB的构造函数会先调用父类AA的构造函数
        BB(int a, int b, double c):AA(a,b),m_c(c) {
            cout <<"BB(int a, int b, int c)"<<endl;
        }
        void show() {
            cout <<"m_a="<<m_a<<"  m_b="<<m_b<<"  m_c="<<m_c<<endl;
        }
};

int main()
{
    BB b1(10);// 使用基类有一个参数的构造函数,初始化m_a
    b1.show();

    BB b2(11,22);// 使用基类有两个参数的构造函数,初始化m_a m_b
    b2.show();

    BB b3(23,44,30.3);// 使用基类有两个参数的构造函数,初始化m_a m_b,同时初始化m_c
    b3.show();
}
上一篇 下一篇

猜你喜欢

热点阅读