何种情况下,子类中需要初始化基类的成员变量?

来源:百度知道 编辑:UC知道 时间:2024/06/22 00:11:40
class base
{
protected:
int i;
public:
base(int x){i = x;}
};
class derived:public base
{
private:
int i;
public:
derived(int x,int y):base(x)
{
i = y;
}
void printtotal()
{
int total = i + base::i;
}
};
为何在derived类中需要对基类的成员变量初始化?去掉:base(x)可以吗?

不行。
因为基类的构造函数有参数,而且不是可选的,去掉就不能初始化了。

子类中的变量会把父类中的相同变量覆盖掉,题目中的derived(int x,int y):base(x)意思是把x给父类的 i 把 y 给子类的i ,所以base(x)不能去掉

derived类中的成员变量i和base类中的成员变更i不是同一个变量,如果去掉,base类中的成员变更i就不能初始化了。
而且,base类也没有默认的构造函数base()。