65,186
社区成员




class Superclass
{
public:
Superclass(int);
}
class Subclass : public Superclass
{
public:
Subclass(int);
}
Subclass::Subclass(int x): Superclass(x)
{ . . . }
Subclass::Subclass(int x):
{
Superclass::Superclass(x);
}
//Case 1
struct A
{
//编译器会按需插入默认构造函数
};
A a; //OK
//Case 2
struct B
{
//因为有了自定义的构造函数,编译器将不再生成默认构造函数
B(int x){}
};
B b; //需要调用默认构造函数,error
//Case 3
struct C
{
//因为有了自定义的构造函数,编译器将不再生成默认构造函数
C(int x){}
//我可以自己加上无参构造函数
C(){}
};
C c; //OK, 调用无参构造函数
希望你明白了。
[quote=引用 8 楼 ls1160 的回复:]
按照典型的用法写构造器的话,就不会调用系统默认的构造函数了吧quote]
class Subclass : public Superclass
{
public:
Subclass(int x)
{
Superclass::Superclass(x);
}
/*
以上相当于
Subclass(int x) : Superclass()//1.调用基类的缺省构造函数
{
Superclass::Superclass(x);//2. 调用基类的带参构造函数
//调用了两次基类的构造函数,这是不允许的。
}
*/
};
Superclass::Superclass(x);