logo

Predvolené konštruktory v C++

Konštruktor bez akýchkoľvek argumentov alebo s predvolenou hodnotou pre každý argument sa nazýva Predvolený konštruktor .

Konštruktor, ktorý má zoznam nulových parametrov alebo v inom zmysle, konštruktor, ktorý neprijíma žiadne argumenty, sa nazýva konštruktor s nulovým argumentom alebo predvolený konštruktor.



Ak predvolený konštruktor nie je definovaný v zdrojovom kóde programátorom, potom kompilátor definoval predvolený konštruktor implicitne počas kompilácie.

Ak je predvolený konštruktor definovaný explicitne v programe programátorom, potom kompilátor nedefinuje konštruktor implicitne, ale implicitne ho volá.

Aký význam má predvolený konštruktor?



plsql

Používajú sa na vytváranie objektov, ktoré nemajú žiadnu konkrétnu počiatočnú hodnotu.

Poskytuje sa automaticky predvolený konštruktor?

Ak v triede nie sú explicitne deklarované žiadne konštruktory, kompilátor automaticky poskytne predvolený konštruktor.



Môže predvolený konštruktor obsahovať predvolený argument?

Áno, konštruktor môže obsahovať predvolený argument s predvolenými hodnotami pre objekt.

Bude v zákulisí kompilátor vložený nejaký kód do predvoleného konštruktora implementovaného používateľom?

Kompilátor implicitne deklaruje predvolený konštruktor, ak ho neposkytuje programátor, a v prípade potreby ho zadefinuje. Predvolený konštruktor definovaný kompilátorom je potrebný na vykonanie určitej inicializácie vnútorných prvkov triedy. Nedotkne sa dátových členov ani obyčajných starých dátových typov (agregáty ako pole, štruktúry atď.). Kompilátor však generuje kód pre predvolený konštruktor na základe situácie.

Zvážte triedu odvodenú od inej triedy s predvoleným konštruktorom alebo triedu obsahujúcu iný objekt triedy s predvoleným konštruktorom. Kompilátor potrebuje vložiť kód na volanie predvolených konštruktorov základnej triedy/vloženého objektu.

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

>

>

Výkon

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

>

fizzbuzz java

>

Existujú rôzne scenáre, v ktorých kompilátor potrebuje vložiť kód, aby zabezpečil určitú potrebnú inicializáciu podľa jazykových požiadaviek. Budeme ich mať v ďalších príspevkoch. Naším cieľom je poznať interné prvky C++, nie ich nesprávne používať.

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

>

>

Výkon

Sum =30 Sum =5>

vysvetlenie: Tu máme konštruktor s dvoma parametrami - jednoduchý parameter a jeden predvolený parameter. Teraz existujú dva spôsoby volania tohto konštruktora:

  1. Najprv môžeme priradiť hodnoty obom argumentom a tieto hodnoty budú odovzdané konštruktorovi a predvolený argument x s hodnotou 0 bude prepísaný hodnotou odovzdanou pri volaní (v tomto prípade 20). Kód teda poskytne výstup 30 (ako, súčet= a+x, tj 10+20= 30).
  2. Druhým spôsobom je neodovzdať žiadnu hodnotu pre predvolený parameter. Ak tak urobíte, x použije svoju predvolenú hodnotu 0 ako konečnú hodnotu a vypočíta súčet 5 (ako, súčet = a+x, tj 5+0=5).