Luokka C++ on rakennuspalikka, joka johtaa olio-ohjelmointiin. Se on käyttäjän määrittämä tietotyyppi, joka sisältää omat tietojäsenensä ja jäsenfunktionsa, joita voidaan käyttää ja joita voidaan käyttää luomalla kyseisen luokan esiintymä. C++-luokka on kuin suunnitelma objektille. Esimerkki: Harkitse luokkaa Autot . Autoja voi olla monia eri nimillä ja merkeillä, mutta niillä kaikilla on joitain yhteisiä ominaisuuksia, kuten niillä kaikilla on 4 pyörää , Nopeusrajoitus , Ajokilometrit, jne. Joten tässä auto on luokka, ja pyörät, nopeusrajoitukset ja ajokilometrit ovat niiden ominaisuuksia.
- Luokka on käyttäjän määrittämä tietotyyppi, jossa on datajäseniä ja jäsentoimintoja.
- Datajäsenet ovat datamuuttujia ja jäsenfunktiot ovat toimintoja, joita käytetään näiden muuttujien käsittelemiseen yhdessä. Nämä datajäsenet ja jäsenfunktiot määrittävät luokan objektien ominaisuudet ja käyttäytymisen.
- Yllä olevassa luokan esimerkissä Auto , datajäsen on nopeusrajoitus , kilometrimäärä, jne, ja jäsentoiminnot voivat olla jarruttaa , lisää nopeutta, jne.
An Esine on luokan esiintymä. Kun luokka määritellään, muistia ei varata, mutta kun se instantoidaan (eli objekti luodaan), muisti varataan.
Luokan määrittely ja objektien ilmoittaminen
Luokka määritellään C++:ssa käyttämällä avainsanaa class, jota seuraa luokan nimi. Luokan runko määritellään hakasulkeiden sisällä ja päättyy puolipisteeseen lopussa.
Esineiden ilmoittaminen
Kun luokka määritellään, vain objektin määrittely määritellään; muistia tai tallennustilaa ei ole varattu. Luokassa määritettyjen tietojen ja käyttötoimintojen käyttämiseksi sinun on luotava objekteja.
Syntaksi
ClassName ObjectName;>
Pääsy datajäseniin ja jäsentoimintoihin : Luokan datajäseniin ja jäsentoimintoihin pääsee käsiksi käyttämällä piste (‘.’) -operaattoria objektin kanssa. Esimerkiksi, jos kohteen nimi on obj ja haluat käyttää jäsentoimintoa nimellä printName() sitten sinun on kirjoitettava obj.printName() .
Tietojen jäsenten käyttö
Myös julkisiin tietoihin pääsee käsiksi samalla tavalla, mutta kohde ei kuitenkaan pääse suoraan yksityisiin tietoihin. Pääsy tietojäseneen riippuu yksinomaan kyseisen datajäsenen pääsynhallinnasta. Tämän pääsynhallinnan antavat C++:n Access-muuntimet. Pääsymääritteitä on kolme: julkinen, yksityinen ja suojattu .
C++
dfs vs bfs
// C++ program to demonstrate accessing of data members> #include> using> namespace> std;> class> Geeks {> >// Access specifier> public>:> >// Data Members> >string geekname;> >// Member Functions()> >void> printname() { cout <<>'Geekname is:'> << geekname; }> };> int> main()> {> >// Declare an object of class geeks> >Geeks obj1;> >// accessing data member> >obj1.geekname =>'Abhi'>;> >// accessing member function> >obj1.printname();> >return> 0;> }> |
>
>Lähtö
Geekname is:Abhi>
Jäsentoiminnot luokissa
Jäsenfunktio voidaan määrittää kahdella tavalla:
- Sisäinen luokan määritelmä
- Luokan määritelmän ulkopuolella
Jäsenfunktion määrittelemiseksi luokan määritelmän ulkopuolella meidän on käytettävä laajuuden resoluutio:: operaattori sekä luokan nimi ja funktion nimi.
C++
// C++ program to demonstrate function> // declaration outside class> > #include> using> namespace> std;> class> Geeks> {> >public>:> >string geekname;> >int> id;> > >// printname is not defined inside class definition> >void> printname();> > >// printid is defined inside class definition> >void> printid()> >{> >cout <<>'Geek id is: '>< } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout <<'Geekname is: '< } int main() { Geeks obj1; obj1.geekname = 'xyz'; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }> |
jos muuten java
>
>Lähtö
Geekname is: xyz Geek id is: 15>
Huomaa, että kaikki luokkamääritelmän sisällä määritellyt jäsenfunktiot ovat oletuksena linjassa , mutta voit myös tehdä minkä tahansa luokkaan kuulumattoman funktion upotettuna käyttämällä avainsanaa niiden kanssa. Inline-funktiot ovat varsinaisia toimintoja, jotka kopioidaan kaikkialle käännöksen aikana, kuten esiprosessorimakro, joten funktiokutsujen ylimääräiset kustannukset vähenevät.
Huomautus: Ilmoittaa a ystävätoiminto on tapa antaa yksityinen pääsy ei-jäsentoimintoon.
Rakentajat
Rakentajat ovat erikoisluokan jäseniä, joita kääntäjä kutsuu aina, kun kyseisen luokan objekti instantoidaan. Konstruktoreilla on sama nimi kuin luokalla ja ne voidaan määrittää luokkamääritelmän sisällä tai ulkopuolella. Rakentajia on 3 tyyppiä:
- Oletuskonstruktorit
- Parametriset rakentajat
- Kopioi rakentajat
C++
mylivecricket.in
// C++ program to demonstrate constructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Default Constructor> >Geeks()> >{> >cout <<>'Default Constructor called'> << endl;> >id=-1;> >}> > >//Parameterized Constructor> >Geeks(>int> x)> >{> >cout <<>'Parameterized Constructor called '><< endl;> >id=x;> >}> };> int> main() {> > >// obj1 will call Default Constructor> >Geeks obj1;> >cout <<>'Geek id is: '>< // obj2 will call Parameterized Constructor Geeks obj2(21); cout <<'Geek id is: ' < return 0; }> |
>
>Lähtö
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>
A Kopioi rakentaja luo uuden objektin, joka on tarkka kopio olemassa olevasta objektista. Kääntäjä tarjoaa oletusarvoisen Copy Constructorin kaikille luokille.
Syntaksi:
class-name (class-name &){}> tuhoajia
Hävittäjä on toinen erityinen jäsenfunktio, jota kääntäjä kutsuu, kun objektin laajuus päättyy.
C++
// C++ program to explain destructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Definition for Destructor> >~Geeks()> >{> >cout <<>'Destructor called for id: '> << id < } }; int main() { Geeks obj1; obj1.id=7; int i = 0; while ( i <5 ) { Geeks obj2; obj2.id=i; i++; } // Scope for obj2 ends here return 0; } // Scope for obj1 ends here> |
>
>Lähtö
Destructor called for id: 0 Destructor called for id: 1 Destructor called for id: 2 Destructor called for id: 3 Destructor called for id: 4 Destructor called for id: 7>
Mielenkiintoinen tosiasia (harvinainen tunnettu käsite)
Miksi annamme puolipisteitä tunnin lopussa?
Monet ihmiset saattavat sanoa, että se on perussyntaksi, ja meidän pitäisi antaa puolipiste luokan lopussa, kuten sen sääntö määrittää cpp:ssä. Mutta tärkein syy siihen, miksi puolipisteet ovat luokan lopussa, on kääntäjä tarkistaa, yrittääkö käyttäjä luoda luokan esiintymän sen loppuun.
Kyllä, kuten rakenne ja liitto, voimme myös luoda luokan ilmentymän loppuun juuri ennen puolipistettä. Tämän seurauksena, kun suoritus saavuttaa kyseisen rivin, se luo luokan ja varaa ilmentymällesi muistia.
C++
java pitkä int
#include> using> namespace> std;> > class> Demo{> >int> a, b;> >public>:> >Demo()>// default constructor> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)>//parameterised constructor> >{> >cout <<>'parameterized constructor -values'> << a <<>' '><< b << endl;> >}> > }instance;> > > int> main() {> > >return> 0;> }> |
>
>
ilmainen vs ilmainenLähtö
Default Constructor>
Voimme nähdä, että olemme luoneet Demon luokkaesiintymän nimellä ilmentymä, minkä seurauksena näkemämme tulos on Default Constructor -kutsu.
Samoin voimme kutsua parametroitua konstruktoria vain välittämällä arvoja tähän
C++
#include> using> namespace> std;> > class> Demo{> >public>:> >int> a, b;> >Demo()> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)> >{> >cout <<>'parameterized Constructor values-'> << a <<>' '><< b << endl;> >}> > > > }instance(100,200);> > > int> main() {> > >return> 0;> }> |
>
>Lähtö
parameterized Constructor values-100 200>
Joten luomalla ilmentymä juuri ennen puolipistettä, voimme luoda luokan ilmentymän.
Aiheeseen liittyvät artikkelit:
- Moninkertainen periytyminen C++:ssa
- Pure Virtual Destroyer
- C++-tietokilpailu