En konstruktor utan några argument eller med standardvärdet för varje argument sägs vara Standardkonstruktör .
En konstruktor som har nollparameterlista eller i annan mening en konstruktor som inte accepterar några argument kallas nollargumentkonstruktor eller standardkonstruktor.
Om standardkonstruktorn inte är definierad i källkoden av programmeraren, definierade kompilatorn standardkonstruktorn implicit under kompileringen.
Om standardkonstruktorn definieras explicit i programmet av programmeraren, kommer kompilatorn inte att definiera konstruktorn implicit, utan den anropar konstruktorn implicit.
Vad är betydelsen av standardkonstruktorn?
datautvinning
De används för att skapa objekt, som inte har något specifikt initialvärde.
Tillhandahålls en standardkonstruktor automatiskt?
Om inga konstruktorer uttryckligen deklareras i klassen, tillhandahålls en standardkonstruktor automatiskt av kompilatorn.
Kan en standardkonstruktor innehålla ett standardargument?
Ja, en konstruktor kan innehålla standardargument med standardvärden för ett objekt.
Kommer det att finnas någon kod som infogas av kompilatorn till den användarimplementerade standardkonstruktören bakom kulisserna?
Kompilatorn kommer implicit deklarera standardkonstruktorn om den inte tillhandahålls av programmeraren, kommer att definiera den när den behövs. Den kompilatordefinierade standardkonstruktorn krävs för att göra viss initiering av klassens interna delar. Det kommer inte att röra datamedlemmarna eller vanliga gamla datatyper (aggregat som en array, strukturer, etc...). Dock genererar kompilatorn kod för standardkonstruktorn baserat på situationen.
Betrakta en klass som härrör från en annan klass med standardkonstruktorn, eller en klass som innehåller ett annat klassobjekt med standardkonstruktorn. Kompilatorn måste infoga kod för att anropa standardkonstruktörerna för basklassen/inbäddade objektet.
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;> }> |
>
>Produktion
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>>namn;> > cout<<> 'Enter the Fee:'> ;> > cin>>avgift;> > }> > > void> display()> > {> > cout<' '<' '< } }; int main() { student s; s.display(); return 0; }> |
>
klass vs objekt java
>
Det finns olika scenarier där kompilatorn behöver infoga kod för att säkerställa nödvändig initiering enligt språkkraven. Vi kommer att ha dem i kommande inlägg. Vårt mål är att vara medveten om C++ interna funktioner, att inte använda dem felaktigt.
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;> }> |
>
>Produktion
Sum =30 Sum =5>
Förklaring : Här har vi en konstruktor med två parameter - enkel parameter och en standardparameter. Nu finns det två sätt att anropa den här konstruktören:
- Först kan vi tilldela värden till båda argumenten och dessa värden kommer att skickas till konstruktorn och standardargumentet x med värde 0 kommer att åsidosättas av värdet som skickas under anropet (i detta fall 20). Därför kommer koden att ge en utdata på 30 (som, summa= a+x dvs 10+20= 30).
- Det andra sättet är att inte skicka något värde för standardparametern. Om du gör det kommer x att ta dess standardvärde 0 som slutvärde och beräkna summan 5 (som, summa = a+x, dvs. 5+0=5).