logo

C++:n oletuskonstruktorit

Konstruktori, jolla ei ole argumentteja tai jolla on oletusarvo jokaiselle argumentille, sanotaan olevan Oletuskonstruktori .

Konstruktoria, jolla on nolla parametrilista tai muussa mielessä konstruktoria, joka ei hyväksy argumentteja, kutsutaan nollaargumenttikonstruktoriksi tai oletuskonstruktoriksi.

Jos ohjelmoija ei ole määrittänyt oletuskonstruktoria lähdekoodissa, kääntäjä määritteli oletuskonstruktorin implisiittisesti kääntämisen aikana.



Jos ohjelmoija määrittelee oletuskonstruktorin eksplisiittisesti ohjelmassa, kääntäjä ei määritä konstruktoria implisiittisesti, vaan se kutsuu konstruktoria implisiittisesti.

Mikä on oletuskonstruktorin merkitys?

kuuntele portti

Niitä käytetään luomaan objekteja, joilla ei ole mitään tiettyä alkuarvoa.

Tarjotaanko oletuskonstruktori automaattisesti?

Jos luokassa ei ole erikseen ilmoitettu rakentajia, kääntäjä tarjoaa automaattisesti oletuskonstruktorin.

Voiko oletuskonstruktori sisältää oletusargumentin?

Kyllä, konstruktori voi sisältää oletusargumentin objektin oletusarvoilla.

Lisääkö kääntäjä kulissien taakse mitään koodia käyttäjän toteuttamaan oletuskonstruktoriin?

Kääntäjä ilmoittaa implisiittisesti oletuskonstruktorin, jos ohjelmoija ei ole antanut sitä, ja määrittää sen tarvittaessa. Kääntäjän määrittämää oletuskonstruktoria tarvitaan tiettyjen luokan sisäisten alustojen tekemiseen. Se ei kosketa datajäseniä tai tavallisia vanhoja tietotyyppejä (aggregaatteja, kuten taulukko, rakenteita jne.). Kääntäjä kuitenkin luo koodin oletuskonstruktorille tilanteen perusteella.

Harkitse luokkaa, joka on johdettu toisesta luokasta oletuskonstruktorilla, tai luokkaa, joka sisältää toisen luokkaobjektin oletuskonstruktorilla. Kääntäjän on lisättävä koodi kutsuakseen perusluokan / upotetun objektin oletusmuodostajia.

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

>

>

Lähtö

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

>

diskreetti matemaattinen negaatio

>

On olemassa erilaisia ​​tilanteita, joissa kääntäjän on lisättävä koodi varmistaakseen tarvittavan alustuksen kielivaatimusten mukaisesti. Saatamme ne tulevissa postauksissa. Tavoitteemme on olla tietoinen C++:n sisäisistä ominaisuuksista, ei käyttämästä niitä väärin.

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

>

>

Lähtö

Sum =30 Sum =5>

Selitys : Tässä meillä on konstruktori, jossa on kaksi parametria - yksinkertainen parametri ja yksi oletusparametri. Nyt on kaksi tapaa kutsua tätä konstruktoria:

  1. Ensinnäkin voimme määrittää arvot molemmille argumenteille ja nämä arvot välitetään rakentajalle ja oletusargumentti x, jonka arvo on 0, ohitetaan kutsussa välitetyllä arvolla (tässä tapauksessa 20). Siten koodi antaa ulostulon 30 (as, summa= a+x eli 10+20= 30).
  2. Toinen tapa on olla välittämättä mitään arvoa oletusparametrille. Jos teet niin, x ottaa oletusarvon 0 lopulliseksi arvokseen ja laskee summan 5 (as, summa = a+x eli 5+0=5).