logo

Конструктори за замовчуванням у C++

Конструктор без будь-яких аргументів або зі значенням за замовчуванням для кожного аргументу називається конструктором Конструктор за замовчуванням .

Конструктор, який має нульовий список параметрів або в іншому сенсі, конструктор, який не приймає аргументів, називається конструктором з нульовим аргументом або конструктором за замовчуванням.



Якщо конструктор за замовчуванням не визначено у вихідному коді програмістом, то компілятор визначив конструктор за замовчуванням неявно під час компіляції.

Якщо конструктор за замовчуванням явно визначено програмістом у програмі, то компілятор не визначить конструктор неявно, але викликає конструктор неявно.

Яке значення конструктора за замовчуванням?



час обіду проти вечері

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

Чи автоматично надається конструктор за замовчуванням?

Якщо в класі явно не оголошено конструкторів, компілятор автоматично надає конструктор за замовчуванням.



Чи може конструктор за замовчуванням містити аргумент за замовчуванням?

Так, конструктор може містити аргумент за замовчуванням зі значеннями за замовчуванням для об’єкта.

Чи буде будь-який код, вставлений компілятором у реалізований користувачем конструктор за замовчуванням за лаштунками?

Компілятор неявно оголосить конструктор за замовчуванням, якщо він не наданий програмістом, визначить його за потреби. Визначений компілятором конструктор за замовчуванням потрібен для певної ініціалізації внутрішніх елементів класу. Він не торкатиметься елементів даних або звичайних старих типів даних (агрегатів, таких як масив, структури тощо). Однак компілятор генерує код для конструктора за замовчуванням на основі ситуації.

Розглянемо клас, похідний від іншого класу з конструктором за замовчуванням, або клас, що містить інший об’єкт класу з конструктором за замовчуванням. Компілятор повинен вставити код для виклику конструкторів за замовчуванням базового класу/вбудованого об’єкта.

C++




// CPP program to demonstrate Default constructors> #include> using> namespace> std;> class> Base {> public>:> >// compiler 'declares' constructor> };> class> A {> public>:> >// User defined constructor> >A() { cout <<>'A Constructor'> << endl; }> >// uninitialized> >int> size;> };> class> B :>public> A {> >// compiler defines default constructor of B, and> >// inserts stub to call A constructor> >// compiler won't initialize any data of A> };> class> C :>public> A {> public>:> >C()> >{> >// User defined default constructor of C> >// Compiler inserts stub to call A's constructor> >cout <<>'C Constructor'> << endl;> >// compiler won't initialize any data of A> >}> };> class> D {> public>:> >D()> >{> >// User defined default constructor of D> >// a - constructor to be called, compiler inserts> >// stub to call A constructor> >cout <<>'D Constructor'> << endl;> >// compiler won't initialize any data of 'a'> >}> private>:> >A a;> };> // Driver Code> int> main()> {> >Base base;> >B b;> >C c;> >D d;> >return> 0;> }>

>

>

Вихід

A Constructor A Constructor C Constructor A Constructor D Constructor>

C++




Example:> #include> using> namespace> std;> class> student> {> >int> rno;> >char> name[50];> >double> fee;> >public>:> >student()>// Explicit Default constructor> >{> >cout<<>'Enter the RollNo:'>;> >cin>>rno;>> >cout<<>'Enter the Name:'>;> >cin>>ім'я;> >cout<<>'Enter the Fee:'>;> >cin>>плата;> >}> > >void> display()> >{> >cout<' '<' '< } }; int main() { student s; s.display(); return 0; }>

>

якщо Редьярд Кіплінг рядок за рядком пояснення

>

Існують різні сценарії, у яких компілятору потрібно вставити код, щоб забезпечити деяку необхідну ініціалізацію відповідно до мовних вимог. Ми опублікуємо їх у наступних публікаціях. Наша мета — бути в курсі внутрішніх функцій C++, а не використовувати їх неправильно.

C++




// CPP code to demonstrate constructor can have default> // arguments> #include> using> namespace> std;> class> A {> public>:> >int> sum = 0;> >A();>// default constructor with no argument> >A(>int> a,>int> x = 0)>// default constructor with one> >// default argument> >{> >sum = a + x;> >}> >void> print() { cout <<>'Sum ='> << sum << endl; }> };> int> main()> {> >// This construct has two arguments. Second argument is> >// initialized with a value of 0 Now we can call the> >// constructor in two possible ways.> >A obj1(10, 20);> >A obj2(5);> >obj1.print();> >obj2.print();> >return> 0;> }>

>

>

Вихід

Sum =30 Sum =5>

Пояснення: Тут у нас є конструктор із двома параметрами — простим параметром і одним параметром за замовчуванням. Тепер є два способи викликати цей конструктор:

  1. По-перше, ми можемо призначити значення обом аргументам, і ці значення будуть передані конструктору, а аргумент за замовчуванням x зі значенням 0 буде перевизначено значенням, переданим під час виклику (у цьому випадку 20). Отже, код виведе 30 (як сума= a+x, тобто 10+20= 30).
  2. Другий спосіб — не передавати значення для параметра за замовчуванням. Якщо ви це зробите, x прийме значення за замовчуванням 0 як кінцеве значення та обчислить суму 5 (як сума = a+x, тобто 5+0=5).