指出下面程序中的错误:
class Base{
private:
int baseVar;
public:
Base(int var){baseVar=var;}
};
class Derived:public Base{
private:
int derivedVar;
public:
Derived(int var){derivedVar=var;}
};
- 当创建一个子类的对象时,系统在执行子类构造函数的函数体之前,首先调用父类的构造函数,初始化父类的成员,如果在子类构造函数的初始化列表中没有显示地调用父类的构造函数,系统会隐式地调用父类无参的构造函数。
- 在子类的构造函数中,如果想显示地调用父类的构造函数,可以在子类构造函数的初始化列表中直接调用父类的构造函数,否则父类中就需要提供无参的构造函数,因为系统会自动调用父类无参的构造函数。
- 子类Derived的构造函数初始化列表没有显示地调用Base类的构造函数,系统会隐式地调用Base类无参的构造函数,但是Base类中既没有声明无参的构造函数,又由于已经声明了一个有参的构造函数而曹成系统不会自动生成默认的无参构造函数,因此在创建Derived类的对象时会发生初始化错误。