初学者的C++11学习:委托构造函数,继承构造函数

内容学习自:爱编程的大丙

一、委托构造函数

委托构造函数允许使用同一个类中的一个构造函数地啊哟用其他的构造函数,从而简化相关变量初始化。下面举例说明

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

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

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

	int m_min;
	int m_max;
	int m_middle;
};
void main()
{
  test13 t(90, 30, 60);
  cout << "min: " << t.m_min << ", middle: "
  << t.m_middle << ", max: " << t.m_max << endl;

}

 这里是一个链式调用,就是第三个调用第二个,第二个调用了第一个

  • 这种链式的构造函数调用不能形成一个闭环(死循环),否则会在运行期抛异常。
  • 如果要进行多层构造函数的链式调用,建议将构造函数的调用的写在初始列表中而不是函数体内部,否则编译器会提示形参的重复定义
  • 并且在这个链中不能重复给同样的变量初始化

二、继承委托构造

之前98版本要自己重写构造,11以后可以使用基类的。之前需要在子类中重新定义和基类一致的构造函数,看看以前是怎么写的

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
{
public:
    Child(int i) :Base(i) {}
    Child(int i, double j) :Base(i, j) {}
    Child(int i, double j, string k) :Base(i, j, k) {}
};

现在可以使用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;

    void print(){cout<<"nihaoya"<<endl}
};

class Child : public Base
{
public:
    using Base::Base;
    using Base::print;
    void print(){cout<<"sawadika"<<endl;}
};

另外,也可以使用using 基类::函数名;实现使用基类被覆盖的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值