我在默认构造函数之间感到困惑。 我有2个代码,代码A和代码B
在代码A中,我不明白为什么A(int news)
不被视为默认构造函数,而代码B ParentClass(int id)
被视为默认构造函数
为什么代码A无法编译,但代码B能够编译。
代码A
class A{
public:
int s;
A(int news){
s = news;
}
void print()
{
cout << s;
}
};
int main()
{
A a;
a.print();
}
代码B
class ParentClass{
public:
int id;
ParentClass(int id){
this->id = id;
}
void print(){
cout << id <<endl;
}
};
class ChildClass:public ParentClass
{
public:
int id;
ChildClass(int id):ParentClass(1)
{
this->id = id;
}
};
int main()
{
ChildClass c(2);
c.print();
}
答案 0 :(得分:5)
编辑后,问题终于变得清晰了。重写我的回答。
序。在C ++中,默认构造函数是一个没有参数的构造函数,或者它的所有参数都有默认值。它用于在未提供其他信息时创建对象。例如,
Default a;
Default* p = new A;
在上面的代码中,调用Default
的默认构造函数。
在示例A
中,您尝试调用A
的默认构造函数 - 因为A a
调用了A的默认构造函数。由于这样的构造函数不存在,因此存在编译错误。您获得的唯一构造函数是一个带整数参数的构造函数,您可以使用以下代码来调用它:
A a(42);
在第二个示例中,您正在调用ChildClass
的非 -default(用户提供的)构造函数 - 因为ChildClass c(1)
调用ChildClass
接受的构造函数一个整数参数 - 你就是这样。顺便说一句,这个ChildClass
构造函数调用ParentClass
构造函数,它只接受一个整数参数。