此处,声明了参数化构造函数,但未创建与该构造函数对应的对象。但输出是10 20,这是参数化构造函数的执行,为什么?
#include<iostream>
using namespace std;
class constructor
{
int x, y;
public:
constructor(int a = 10, int b = 20 )
{
x = a;
y = b;
}
void Display()
{
cout<< x << " " << y << endl;
}
};
int main()
{
constructor objBix;
objBix.Display();
return 0;
}
答案 0 :(得分:3)
由于您已使用所有默认参数定义了自定义构造函数,因此它将用作默认构造函数。编译器不会生成另一个默认值,因为在决定调用哪个函数时会导致歧义。所以实际上调用的是使用所有默认参数的自定义构造函数。编译器生成的&#34;默认&#34;根本不存在。
参考:CppReference
默认构造函数是一个构造函数,可以不带参数调用(使用空参数列表定义,或使用为每个参数提供的默认参数)。
答案 1 :(得分:1)
引用cppreference:
默认构造函数是一个构造函数,可以不带参数调用(使用空参数列表定义,或者为每个参数提供默认参数)。
如果没有提供其他构造函数,编译器将仅隐式生成默认构造函数,因此在您的示例中不会生成它。
答案 2 :(得分:0)
您确实定义了一个无参数构造函数,覆盖了默认构造函数。您为参数提供了默认值,因此您可以在不使用参数的情况下调用它,并使用默认值。
答案 3 :(得分:0)
在这种情况下,已定义参数化构造函数,其中所有参数都具有一些默认值。因此,即使您创建了一个没有传递任何参数的对象,它也会将Parameterized构造函数视为默认构造函数并调用它。 例如,如果将构造函数定义为
constructor(int a, int b = 20 )
{
x = a;
y = b;
}
然后你必须创建该类的新对象,其中至少有一个值将分配给参数“a”。
答案 4 :(得分:-1)
您可以在之前的答案中阅读,因为您为参数提供了默认值,这是此类对象的默认构造函数。
所以它就像写:
constructor()
{
x = a;
y = b;
}
这正是你所做的!