Здесь объявляется параметризованный конструктор, но объект, соответствующий этому конструктору, не создается. Но на выходе получается 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;
}
Поскольку вы определили пользовательский конструктор с все аргументы по умолчанию, он будет служить конструктором по умолчанию. Компилятор не будет генерировать еще один по умолчанию, потому что это может привести к неоднозначности при решении, какую функцию вызывать. Так что на самом деле называется ваш пользовательский конструктор со всеми используемыми аргументами по умолчанию. Сгенерированный компилятором «default» вообще не существует.
Ссылка: CppReference
Конструктор по умолчанию — это конструктор, который можно вызывать без аргументов (либо определяется с помощью пустого списка параметров, либо с аргументами по умолчанию для каждого параметра).
квотирование cppreference:
Конструктор по умолчанию — это конструктор, который может быть вызван без аргументов (либо определяется с помощью пустого списка параметров, либо с аргументами по умолчанию, предоставленными для каждого параметра).
Компилятор неявно сгенерирует для вас конструктор по умолчанию, если другие конструкторы не предоставлены, поэтому в вашем примере он не генерируется.
Вы определили конструктор без аргументов, переопределив конструктор по умолчанию. Вы дали значения по умолчанию для параметров, и, следовательно, вы можете вызывать его без аргументов, и ваши значения по умолчанию используются.
В этом случае конструктор Parameterized был определен со всеми параметрами, имеющими некоторые значения по умолчанию. Таким образом, даже если вы создадите объект без передачи каких-либо аргументов, он будет рассматривать конструктор Parameterized как конструктор по умолчанию и вызывается.
например, если вы определяете конструктор как
constructor(int a, int b = 20 )
{
x = a;
y = b;
}
Затем вам нужно создать новый объект класса с хотя бы одним значением, которое будет присвоено параметру «a».
как вы можете прочитать в предыдущих ответах, поскольку вы задали значения по умолчанию для аргументов, это конструктор по умолчанию для объектов этого класса.
так это как написать:
constructor()
{
x = a;
y = b;
}
это именно то, что вы сделали!