一、子类与基类构造函数的关系
-
如果子类和基类都有构造函数和析构函数,
那么当实例化子类的对象的时候,先调用基类的构造,然后调用子类的构造;
当程序结束时,顺序相反,先调用子类的析构函数,再调用基类的析构函数。
-
当基类的构造函数是默认(缺省)的时候,他们的调用是自动完成的,不需要在子类中显示的调用基类的构造函数。这也叫做隐式调用。
-
但是当基类的构造函数带有参数的时候,就需要让子类的构造函数显示的调用基类的构造函数,并向基类的构造函数传递适当的参数。
如下例子所示,当基类grade的构造函数带有一个参数:
Grade::Grade(float a)
{
myGrade = a;
calClass(myGrade);
}
子类test的构造函数就需要按照如下形式定义:
//test的构造函数
Test::Test(int t,int e):Grade(10) //显示调用基类构造,并传递参数
{
totalQuestion = t;
errorQuestion = e;
//总分100,计算每个问题的平均分数
float temp = 100.0f/totalQuestion;
//子类中访问基类的protected成员
myGrade =