logo

C++-luokat ja objektit

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.

C++-luokka ja objekti

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ä:

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 ilmainen
Lä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