gpt4 book ai didi

c++ - 为什么这不被视为默认构造函数?

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:21 25 4
gpt4 key购买 nike

我对默认构造函数感到困惑。我有 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();
}

最佳答案

经过编辑,问题终于清楚了。改写我的答案。

前言。在 C++ 中,默认构造函数是没有参数或所有参数都具有默认值的构造函数。当没有提供额外信息时,它用于创建对象。例如,

Default a;
Default* p = new A;

在上面的代码中,调用了Default的默认构造函数。

在示例 A 中,您试图调用 A 的默认构造函数 - 因为 A a 调用了 A 的默认构造函数。由于不存在这样的构造函数,因此出现编译错误。您拥有的唯一构造函数是一个接受整数参数的构造函数,您可以使用以下代码调用它:

A a(42);

在第二个示例中,您正在调用 ChildClass-默认(用户提供)构造函数 - 因为 ChildClass c(1)调用接受一个整数参数的 ChildClass 的构造函数 - 而您就是这样。顺便说一下,这个 ChildClass 构造函数调用 ParentClass 构造函数,它只接受一个整数参数。

关于c++ - 为什么这不被视为默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36577667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com