Konstruktor bez jakýchkoli argumentů nebo s výchozí hodnotou pro každý argument se nazývá Výchozí konstruktor .
Konstruktor, který má nulový seznam parametrů nebo v jiném smyslu konstruktor, který nepřijímá žádné argumenty, se nazývá konstruktor s nulovým argumentem nebo výchozí konstruktor.
Pokud není výchozí konstruktor definován ve zdrojovém kódu programátorem, pak kompilátor definoval výchozí konstruktor implicitně během kompilace.
Pokud je výchozí konstruktor definován v programu explicitně programátorem, pak kompilátor nedefinuje konstruktor implicitně, ale implicitně jej volá.
Jaký je význam výchozího konstruktoru?
es5 vs es6
Používají se k vytváření objektů, které nemají žádnou konkrétní počáteční hodnotu.
Je automaticky poskytnut výchozí konstruktor?
Pokud nejsou ve třídě explicitně deklarovány žádné konstruktory, kompilátor automaticky poskytne výchozí konstruktor.
Může výchozí konstruktor obsahovat výchozí argument?
Ano, konstruktor může obsahovat výchozí argument s výchozími hodnotami pro objekt.
Bude nějaký kód vložený kompilátorem do uživatelem implementovaného výchozího konstruktoru v zákulisí?
Kompilátor implicitně deklaruje výchozí konstruktor, pokud jej neposkytne programátor, a v případě potřeby jej definuje. K provedení určité inicializace vnitřních prvků třídy je vyžadován výchozí konstruktor definovaný kompilátorem. Nedotkne se datových členů nebo obyčejných starých datových typů (agregáty jako pole, struktury atd.). Kompilátor však generuje kód pro výchozí konstruktor na základě situace.
Zvažte třídu odvozenou od jiné třídy s výchozím konstruktorem nebo třídu obsahující jiný objekt třídy s výchozím konstruktorem. Kompilátor potřebuje vložit kód pro volání výchozích konstruktorů základní třídy/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ýstup
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>>jméno;> > cout<<> 'Enter the Fee:'> ;> > cin>>poplatek;> > }> > > void> display()> > {> > cout<' '<' '< } }; int main() { student s; s.display(); return 0; }> |
>
entita vztahová
>
Existují různé scénáře, ve kterých kompilátor potřebuje vložit kód, aby zajistil určitou nezbytnou inicializaci podle jazykových požadavků. Budeme je mít v nadcházejících příspěvcích. Naším cílem je znát vnitřní prvky C++ a nepoužívat je nesprávně.
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ýstup
Sum =30 Sum =5>
Vysvětlení : Zde máme konstruktor se dvěma parametry – jednoduchým parametrem a jedním výchozím parametrem. Nyní existují dva způsoby volání tohoto konstruktoru:
- Nejprve můžeme oběma argumentům přiřadit hodnoty a tyto hodnoty budou předány konstruktoru a výchozí argument x s hodnotou 0 bude přepsán hodnotou předávanou při volání (v tomto případě 20). Kód tedy poskytne výstup 30 (as, součet= a+x tj. 10+20= 30).
- Druhým způsobem je nepředávat žádnou hodnotu výchozího parametru. Pokud tak učiníte, x vezme svou výchozí hodnotu 0 jako konečnou hodnotu a vypočítá součet 5 (jako, součet = a+x tj. 5+0=5).