继承类对于基类的构造函数继承有几种情况
1.继承基类的无参数构造函数,形如:
class base
{
public:
base()
{
printf("伙计!基类构造函数被继承啦!");
}
};
class Derived :public base
{
public:
Derived()
{
}
};
这样,运行结果为:
伙计!基类构造函数被继承啦!
像这样,基类的无参数构造函数可以隐式的被继承,无需再继承类中多做处理。
对于基类有参数的构造函数,我们可不可以隐式继承呢?我们做如下实验:
{
public:
base()
{
printf("伙计!基类构造函数被继承啦!");
}
base(int x)
{
printf("伙计!基类构造函数被继承啦!x=%d\n",x);
}
};
class Derived :public base
{
public:
Derived(int x)
{
printf("我是继承类的带参数构造函数!x=%d\n", x);
}
};
运行Derived(1);
运行结果:
伙计!基类构造函数被继承啦!
我是继承类的带参数构造函数!x=1
可以看到,先运行了基类的默认构造函数,然后再运行自己的带参数的构造函数,并没有运行基类的带参数的构造函数!对于基类有参数的构造函数,如果继承类想要继承,需要做如下处理:class base{
public:
base(){
printf("伙计!基类构造函数被继承啦!");
}
base(int x)
{
printf("伙计!基类构造函数被继承啦!x=%d\n",x);
}
};
class Derived :public base
{
public:
Derived() { }
Derived(int x) :base(x)
{
printf("我是继承类的带参数构造函数!x=%d\n", x);
}
};
运行Derived(1);
运行结果:伙计!基类构造函数被继承啦!x=1
我是继承类的带参数构造函数!x=1
:base(x)其实就是 初始化列表 在调用自身构造函数前,显式调用base(x),这个很好理解。
这里我们就知道,带参数的基类构造函数是不能被继承的。
知识其实很简单,重点是运用在实际工作中时,我们设计程序时,要注意基类的带有参数的构造函数,在继承类中的使用,怎么使用才能好让阅读代码的人理解!