logo

Standardkonstruktoren in C++

Ein Konstruktor ohne Argumente oder mit dem Standardwert für jedes Argument wird als der bezeichnet Standardkonstruktor .

Ein Konstruktor, der eine Null-Parameterliste hat oder in einem anderen Sinne ein Konstruktor, der keine Argumente akzeptiert, wird als Null-Argument-Konstruktor oder Standardkonstruktor bezeichnet.



Wenn der Standardkonstruktor vom Programmierer nicht im Quellcode definiert ist, hat der Compiler den Standardkonstruktor implizit während der Kompilierung definiert.

Wenn der Standardkonstruktor vom Programmierer explizit im Programm definiert wird, definiert der Compiler den Konstruktor nicht implizit, sondern ruft den Konstruktor implizit auf.

Welche Bedeutung hat der Standardkonstruktor?



allgemeine Schutzverletzung

Sie werden zur Erstellung von Objekten verwendet, die keinen bestimmten Anfangswert haben.

Wird automatisch ein Standardkonstruktor bereitgestellt?

Wenn in der Klasse keine Konstruktoren explizit deklariert sind, wird vom Compiler automatisch ein Standardkonstruktor bereitgestellt.



Kann ein Standardkonstruktor ein Standardargument enthalten?

Ja, ein Konstruktor kann Standardargumente mit Standardwerten für ein Objekt enthalten.

Wird vom Compiler hinter den Kulissen Code in den vom Benutzer implementierten Standardkonstruktor eingefügt?

Der Compiler deklariert implizit den Standardkonstruktor, wenn er nicht vom Programmierer bereitgestellt wird, und definiert ihn bei Bedarf. Der vom Compiler definierte Standardkonstruktor ist erforderlich, um bestimmte Initialisierungen von Klasseninterna durchzuführen. Die Datenelemente oder einfache alte Datentypen (Aggregate wie ein Array, Strukturen usw.) werden nicht berührt. Der Compiler generiert jedoch je nach Situation Code für den Standardkonstruktor.

Betrachten Sie eine von einer anderen Klasse abgeleitete Klasse mit dem Standardkonstruktor oder eine Klasse, die ein anderes Klassenobjekt mit dem Standardkonstruktor enthält. Der Compiler muss Code einfügen, um die Standardkonstruktoren der Basisklasse/des eingebetteten Objekts aufzurufen.

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

>

>

Ausgabe

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

>

wie man die MySQL-Workbench verwendet

>

Es gibt verschiedene Szenarien, in denen der Compiler Code einfügen muss, um die erforderliche Initialisierung gemäß den Sprachanforderungen sicherzustellen. Wir werden sie in den kommenden Beiträgen veröffentlichen. Unser Ziel ist es, die Interna von C++ zu kennen und sie nicht falsch zu verwenden.

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

>

>

Ausgabe

Sum =30 Sum =5>

Erläuterung : Hier haben wir einen Konstruktor mit zwei Parametern – einem einfachen Parameter und einem Standardparameter. Nun gibt es zwei Möglichkeiten, diesen Konstruktor aufzurufen:

  1. Erstens können wir beiden Argumenten Werte zuweisen und diese Werte werden an den Konstruktor übergeben und das Standardargument x mit dem Wert 0 wird durch den beim Aufruf übergebenen Wert (in diesem Fall 20) überschrieben. Daher ergibt der Code eine Ausgabe von 30 (als Summe = a+x, d. h. 10+20= 30).
  2. Die zweite Möglichkeit besteht darin, keinen Wert für den Standardparameter zu übergeben. Wenn Sie dies tun, nimmt x seinen Standardwert 0 als Endwert und berechnet eine Summe von 5 (als Summe = a+x, also 5+0=5).