编辑代码

#include <iostream>
using namespace std;
//委托构造函数

//c++11前不允许构造函数调用别的构造函数,而委托构造允许使用同一个类中的一个构造函数调用其它的构造函数,从而简化相关变量的初始化。

class Test
{
    public:
    Test(){};
    Test(int max)
    {
        this->m_max=max>0?max:100;
    }

    Test(int max, int min)
    {
        this->m_max=max>0?max:100;
        this->m_min=min>0&&min<max?min:1;
    }

     Test(int max, int min,int mid)
    {
        this->m_max=max>0?max:100;
        this->m_min=min>0&&min<max?min:1;
        this->m_middle=mid<max&&mid>min?mid:50;

        //这样很多代码重复
    }
    int m_max;
    int m_min;
    int m_middle;

};

//委托构造函数

class Test2
{
    public:
    Test2(){};
    Test2(int max)
    {
        this->m_max=max>0?max:100;
    }

    Test2(int max, int min):Test2( max)
    {
        
        this->m_min=min>0&&min<max?min:1;
    }

     Test2(int max, int min,int mid):Test2(max,min)
    {
        this->m_middle=mid<max&&mid>min?mid:50;

        //链状调用可以,不能形成一个闭环。 不能将被调用的构造函数放到函数体内,会造成参数重定义。
    }

    int m_max;
    int m_min;
    int m_middle;

};

//2继承构造函数
//c++11中提供的继承构造函数可以让派生类直接使用基类的构造函数,而无需自己再写构造函数,尤其是在基类有很多构造函数的情况下
//,可以极大地简化派生类构造函数的编写。
//继承构造函数的使用方法是这样的:通过使用 using 类名::构造函数名(其实类名和构造函数名是一样的)来声明使用基类的构造函数,这样子类中就可以不定义相同的构造函数了,直接使用基类的构造函数来构造派生类对象。




class Base
{
    public:
    Base(int i) :m_i(i) {}
    Base(int i, double j) :m_i(i), m_j(j) {}
    Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {}

    int m_i;
    double m_j;
    string m_k;



};


class Child:public Base{

        using Base::Base;
};

void test()
{
    Child c1(520, 13.14);
    cout << "int: " << c1.m_i << ", double: " << c1.m_j << endl;
    Child c2(520, 13.14, "i love you");
    cout << "int: " << c2.m_i << ", double: " << c2.m_j << ", string: " << c2.m_k << endl;


    
}

int main() {
    test();
	return 0;
};