关于父类构造函数与子类构造函数之间的区别?
为了说清楚父类构造函数、子类构造函数,我们先看一个例子:请指出下面程序中的错误:
class Base
{
private:
int baseVar;
public:
Base(int var)
{
baseVar = var;
}
};
class Derived :public Base
{
private:
int derivedVar;
public:
Derived(int var)
{
derivedVar = var;
}
};
分析:
由于当创建一个子类对象时,系统在执行子类构造函数的函数体之前,首先调用父类的构造函数初始化父类的成员,如果在子类构造函数的初始化列表中没有显式调用父类的构造函数,系统会隐式地调用父类无参的构造函数。因此,如果父类没有默认构造函数,而且子类的初始化列表中也没有显式调用父类的构造函数的话,创建子类对象时会发生初始化错误。
如何修改以上程序的错误?方法有两个:
如何修改以上程序的错误?方法有两个:
(1)为Base类声明一个无参的构造函数(默认构造函数)
class Base
{
private:
int baseVar;
public:
Base()
{}
Base(int var)
{
baseVar = var;
}
};
(2)在Derived类的构造函数的初始化列表中调用Base类的构造函数
class Derived :public Base
{
private:
int derivedVar;
public:
Derived(int var, int b=0)
:Base(b)
{
derivedVar = var;
}
};