继承构造

类发生继承关系时,需要初始化基类,常常造成比较繁琐的写法

class Base{
	Base(int i){
		iAge = i;
	}
private:
	int iAge;
}

class A:public Base{
	A(int i):Base(i){}//只是为了传递参数到基类中初始化
}

以上例子看着挺简单的,好像谈不上繁琐写法,但如果Base有多种形式的构造函数呢,此时派生类A很可能需要再重写一遍基类种的所有构造函数,但仅仅是为了透传参数给基类进行初始化,程序员大多比较懒,能坐着绝不站着,能躺着绝不坐着,于是有了以下写法:

class Base{
	Base(int i){
		iAge = i;
	}
private:
	int iAge;
}

class A:public Base{
	using Base::Base //表示从继承所有的构造函数,无形中生成了 A(int i){} 构造函数
}

使用using还会遇到多继承的尴尬场面:

class BaseA{
	BaseA(int i){}
}

class BaseB{
	BaseB(int i){}
}

class Test:public BaseA,public BaseB{
	using BaseA::BaseA;//编译器期望生成Test(int i){}
	using BaseB::BaseB;//编译器期望生成Test(int i){}

	//尴尬了,冥冥之中,要生成两个 Test(int i){},编译器不敢说话,清官难断家务事
	//此时需要自己显式地定义个构造函数,镇压基类继承的构造函数
	Test(int i){}
}

版权声明:本文为lushangqiushui原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。