logo

Constructori impliciti în C++

Un constructor fără niciun argument sau cu valoarea implicită pentru fiecare argument se spune că este Constructor implicit .

Un constructor care are o listă de parametri zero sau, în alt sens, un constructor care nu acceptă argumente este numit constructor cu zero argument sau constructor implicit.

Dacă constructorul implicit nu este definit în codul sursă de către programator, atunci compilatorul a definit implicit constructorul implicit în timpul compilării.



Dacă constructorul implicit este definit explicit în program de către programator, atunci compilatorul nu va defini implicit constructorul, dar îl va apela implicit pe constructor.

Care este semnificația constructorului implicit?

unde gasesc setarile browserului meu

Sunt folosite pentru a crea obiecte, care nu au nicio valoare inițială specifică.

Este furnizat automat un constructor implicit?

Dacă nu sunt declarați în mod explicit constructori în clasă, un constructor implicit este furnizat automat de către compilator.

Poate un constructor implicit să conțină un argument implicit?

Da, un constructor poate conține argument implicit cu valori implicite pentru un obiect.

Va fi vreun cod inserat de compilator în constructorul implicit implementat de utilizator în spatele scenei?

Compilatorul va declara implicit constructorul implicit dacă nu este furnizat de programator, îl va defini atunci când va fi nevoie. Constructorul implicit definit de compilator este necesar pentru a face anumite inițializare a elementelor interne ale clasei. Nu va atinge membrii de date sau tipurile de date vechi (agregate, cum ar fi o matrice, structuri etc...). Cu toate acestea, compilatorul generează cod pentru constructorul implicit în funcție de situație.

Luați în considerare o clasă derivată dintr-o altă clasă cu constructorul implicit sau o clasă care conține un alt obiect de clasă cu constructorul implicit. Compilatorul trebuie să insereze cod pentru a apela constructorii impliciti ai clasei de bază/obiectului încorporat.

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;> }>

>

>

Ieșire

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>>nume;> >cout<<>'Enter the Fee:'>;> >cin>>taxă;> >}> > >void> display()> >{> >cout<' '<' '< } }; int main() { student s; s.display(); return 0; }>

>

java este gol

>

Există diferite scenarii în care compilatorul trebuie să insereze cod pentru a asigura inițializarea necesară conform cerințelor de limbă. Le vom avea în postările viitoare. Obiectivul nostru este să fim conștienți de elementele interne C++, nu să le folosim incorect.

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;> }>

>

>

Ieșire

Sum =30 Sum =5>

Explicatie: Aici, avem un constructor cu doi parametri-parametru simplu și un parametru implicit. Acum, există două moduri de a apela acest constructor:

  1. În primul rând, putem atribui valori ambelor argumente, iar aceste valori vor fi transmise constructorului, iar argumentul implicit x cu valoarea 0 va fi suprascris de valoarea transmisă în timpul apelării (în acest caz 20). Prin urmare, codul va da o ieșire de 30 (ca, sum= a+x, adică 10+20= 30).
  2. A doua modalitate este de a nu transmite nicio valoare pentru parametrul implicit. Dacă procedați astfel, x va lua valoarea implicită 0 ca valoare finală și va calcula o sumă de 5 (cum, suma = a+x, adică 5+0=5).