类发生继承关系时,需要初始化基类,常常造成比较繁琐的写法
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版权协议,转载请附上原文出处链接和本声明。