Konstruktor bez żadnych argumentów lub z wartością domyślną dla każdego argumentu nazywa się Domyślny konstruktor .
Konstruktor, który ma listę parametrów zerowych lub w innym sensie konstruktor, który nie akceptuje żadnych argumentów, nazywany jest konstruktorem zerowym argumentem lub konstruktorem domyślnym.
Jeśli programista nie zdefiniuje domyślnego konstruktora w kodzie źródłowym, kompilator zdefiniuje domyślny konstruktor domyślnie podczas kompilacji.
Jeżeli domyślny konstruktor jest jawnie zdefiniowany w programie przez programistę, to kompilator nie zdefiniuje konstruktora w sposób dorozumiany, ale wywoła go w sposób niejawny.
Jakie jest znaczenie konstruktora domyślnego?
ile klawiszy ma klawiatura
Służą do tworzenia obiektów, które nie mają określonej wartości początkowej.
Czy domyślny konstruktor jest udostępniany automatycznie?
Jeśli w klasie nie zadeklarowano jawnie żadnego konstruktora, kompilator automatycznie udostępnia konstruktor domyślny.
Czy konstruktor domyślny może zawierać domyślny argument?
Tak, konstruktor może zawierać domyślny argument z domyślnymi wartościami obiektu.
Czy kompilator wstawi jakiś kod do domyślnego konstruktora zaimplementowanego przez użytkownika za kulisami?
Kompilator domyślnie zadeklaruje konstruktor domyślny, jeśli nie zostanie dostarczony przez programistę, zdefiniuje go w razie potrzeby. Domyślny konstruktor zdefiniowany przez kompilator jest wymagany do wykonania określonej inicjalizacji elementów wewnętrznych klasy. Nie dotknie elementów danych ani zwykłych starych typów danych (agregatów, takich jak tablica, struktury itp.). Jednak kompilator generuje kod dla konstruktora domyślnego na podstawie sytuacji.
Rozważmy klasę pochodną innej klasy z domyślnym konstruktorem lub klasę zawierającą inny obiekt klasy z domyślnym konstruktorem. Kompilator musi wstawić kod, aby wywołać domyślne konstruktory klasy bazowej/obiektu osadzonego.
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;> }> |
>
>Wyjście
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>>nie;> > cout<<> 'Enter the Name:'> ;> > cin>>imię;> > cout<<> 'Enter the Fee:'> ;> > cin>>opłata;> > }> > > void> display()> > {> > cout<' '<' '< } }; int main() { student s; s.display(); return 0; }> |
>
pobierz filmy z YouTube'a na VLC
>
Istnieją różne scenariusze, w których kompilator musi wstawić kod, aby zapewnić niezbędną inicjalizację zgodnie z wymaganiami językowymi. Będziemy je zamieszczać w kolejnych postach. Naszym celem jest poznanie elementów wewnętrznych C++, a nie używanie ich niepoprawnie.
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;> }> |
>
>Wyjście
Sum =30 Sum =5>
Wyjaśnienie : Tutaj mamy konstruktor z dwoma parametrami - parametrem prostym i jednym parametrem domyślnym. Istnieją dwa sposoby wywołania tego konstruktora:
- Po pierwsze, możemy przypisać wartości obu argumentom i te wartości zostaną przekazane do konstruktora, a domyślny argument x o wartości 0 zostanie nadpisany przez wartość przekazaną podczas wywołania (w tym przypadku 20). Dlatego kod da wynik 30 (jak suma = a+x, tj. 10+20= 30).
- Drugi sposób polega na nieprzekazaniu żadnej wartości parametrowi domyślnemu. Jeśli to zrobisz, x przyjmie domyślną wartość 0 jako wartość końcową i obliczy sumę 5 (jako suma = a+x, tj. 5+0=5).