由于派生类包含基类的原因,我们在创建一个派生类的时候,系统会先创建一个基类。需要注意的是,派生类会吸纳基类的全部成员,但并不包括构造函数及后面讲的析构函数,那么就意味着创建派生类在调用自己的构造函数之前,会先调用基类的构造函数。
这里一点我们可以通过代码验证:
#include<iostream>
using namespace std;
class Clock
{
private:
int H;
int M;
int S;
public:
Clock()
{
cout<<"Clock's Constructor Called!"<<endl;
}
};
class AlarmClock:public Clock
{
private:
int AH;
int AM;
public:
AlarmClock()
{
cout<<"AlarmClock's Constructor Called!"<<endl;
}
};
int main()
{
AlarmClock A;
return 0;
}
以上大家看到的是最常见也最简单的调用方法,这仅仅是隐式的、也就是不用写出来、自动的调用。那么当基类的构造函数是带参数的情况下如何调用呢?这样还可以吗?如何传参呢?
那就需要我们显式的、也就是明确的写出来,并指定参数传递,来告诉编译器。
一般的写法格式为:
派生类构造函数名(总形参表列):基类构造函数(实参表列)
例如代码:
#include<iostream>
using namespace std;
class Clock
{
private:
int H;
int M;
int S;
public:
Clock()
{
cout<<"Clock's Constructor Called!"<<endl;
}
Clock(int h,int m,int s)
{
this->H = h;
this->M = m;
this->S = s;
cout<<"Clock's Constructor with parameter Called!"<<endl;
}
};
class AlarmClock:public Clock
{
private:
int AH;
int AM;
public:
AlarmClock()
{
cout<<"AlarmClock's Constructor Called!"<<endl;
}
AlarmClock(int h,int m,int s):Clock(h,m,s)//带参构造函数调用示例
{
cout<<"AlarmClock's Constructor with parameter Called!"<<endl;
}
};
int main()
{
AlarmClock A(8,10,30);
AlarmClock B;
return 0;
}