Какой конструктор будет выполнен?

Здесь объявляется параметризованный конструктор, но объект, соответствующий этому конструктору, не создается. Но на выходе получается 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

Решение

Поскольку вы определили пользовательский конструктор с все аргументы по умолчанию, он будет служить конструктором по умолчанию. Компилятор не будет генерировать еще один по умолчанию, потому что это может привести к неоднозначности при решении, какую функцию вызывать. Так что на самом деле называется ваш пользовательский конструктор со всеми используемыми аргументами по умолчанию. Сгенерированный компилятором «default» вообще не существует.

Ссылка: CppReference

Конструктор по умолчанию — это конструктор, который можно вызывать без аргументов (либо определяется с помощью пустого списка параметров, либо с аргументами по умолчанию для каждого параметра).

3

Другие решения

квотирование cppreference:

Конструктор по умолчанию — это конструктор, который может быть вызван без аргументов (либо определяется с помощью пустого списка параметров, либо с аргументами по умолчанию, предоставленными для каждого параметра).

Компилятор неявно сгенерирует для вас конструктор по умолчанию, если другие конструкторы не предоставлены, поэтому в вашем примере он не генерируется.

1

Вы определили конструктор без аргументов, переопределив конструктор по умолчанию. Вы дали значения по умолчанию для параметров, и, следовательно, вы можете вызывать его без аргументов, и ваши значения по умолчанию используются.

0

В этом случае конструктор Parameterized был определен со всеми параметрами, имеющими некоторые значения по умолчанию. Таким образом, даже если вы создадите объект без передачи каких-либо аргументов, он будет рассматривать конструктор Parameterized как конструктор по умолчанию и вызывается.
например, если вы определяете конструктор как

constructor(int a, int b = 20 )
{
x = a;
y = b;
}

Затем вам нужно создать новый объект класса с хотя бы одним значением, которое будет присвоено параметру «a».

0

как вы можете прочитать в предыдущих ответах, поскольку вы задали значения по умолчанию для аргументов, это конструктор по умолчанию для объектов этого класса.

так это как написать:

constructor()
{
x = a;
y = b;
}

это именно то, что вы сделали!

-1
По вопросам рекламы [email protected]