父类的构造函数带有参数,子类重载构造函数的时候竟然出问题了?
class a
{
a(int a, int b, int c);
//a();
};
class b: public a
{
b(int d, int e, int f);
};
如果去掉注释,就可以。否则提示 a:no appropriate default constructor available
问题点数:20、回复次数:5Top
1 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2004-09-02 20:01:58 得分 0
可以啊Top
2 楼meijing(水手)回复于 2004-09-02 20:05:11 得分 15
1。 题目错了:你说的不叫“子类重载构造函数”。
2。 当然错了:构造子类对象的时候,在进入子类构造函数之前会先调用父类的构造函数。
如果没有显式调用父类构造函数就会调用默认的父类构造函数。但是你的父类又没有默认构造函数所以自然会出错。
3。几种修改方法:
a。如你所说。
b。显示调用父类构造函数:
class a
{
a(int a, int b, int c);
//a();
};
class b: public a
{
b(int d, int e, int f);
};
// in .cpp file
b::b(int d, int e, int f): a(d, e, f)
{
...
}Top
3 楼hcj2002(流浪者·躬自厚而薄责于人 )回复于 2004-09-02 20:47:09 得分 1
同意楼上的!Top
4 楼runall(龙行天下)回复于 2004-09-03 09:57:19 得分 1
子类构造函数需要先调用父类的构造函数,如果你没有在子类构造函数中显示调用父类构造函数,默认调用的父类的默认构造函数(不带参数的构造函数)
因为你在父类中有了一个带参数的构造函数,所以编译器不会给你创建默认的不带参数构造函数,而你的子类中又没有显示调用父类的构造函数,编译器在调用父类的默认构造函数时就会出错Top
5 楼Andy84920(你也不懂)回复于 2004-09-03 10:17:41 得分 3
如果去掉注释,就可以。否则提示 a:no appropriate default constructor available
//因为你的派生类没有显示调用非默认基类构造函数,所以系统默认派生类调用
//基类的默认构造函数.而你基类没有这个默认构造函数.那么你将失败.Top




