logo

C++ triedy a objekty

Trieda v C++ je stavebným kameňom, ktorý vedie k objektovo orientovanému programovaniu. Je to užívateľsky definovaný dátový typ, ktorý obsahuje svoje vlastné dátové členy a členské funkcie, ku ktorým možno pristupovať a používať ich vytvorením inštancie danej triedy. Trieda C++ je ako návrh objektu. Napríklad: Zvážte triedu Autá . Môže existovať veľa áut s rôznymi názvami a značkami, ale všetky budú mať spoločné vlastnosti, aké budú mať všetky 4 kolesá , Rýchlostné obmedzenia , najazdené kilometre, atď. Takže tu je trieda Auto a kolesá, rýchlostné limity a počet najazdených kilometrov sú ich vlastnosti.

  • Trieda je používateľom definovaný dátový typ, ktorý má dátové členy a členské funkcie.
  • Dátové členy sú dátové premenné a členské funkcie sú funkcie používané na spoločnú manipuláciu s týmito premennými. Tieto dátové členy a členské funkcie definujú vlastnosti a správanie objektov v triede.
  • Vo vyššie uvedenom príklade triedy Auto , údajovým členom bude rýchlostné obmedzenia , najazdené kilometre, atď a členské funkcie môžu byť použitie bŕzd , zvýšenie rýchlosti, atď.

An Objekt je inštanciou triedy. Keď je definovaná trieda, nie je pridelená žiadna pamäť, ale keď sa vytvorí inštancia (t. j. vytvorí sa objekt), pamäť sa pridelí.



Definovanie triedy a deklarovanie objektov

Trieda je definovaná v C++ pomocou kľúčového slova class, za ktorým nasleduje názov triedy. Telo triedy je definované v zložených zátvorkách a ukončené bodkočiarkou na konci.

Trieda a objekt C++

Deklarovanie objektov

Keď je definovaná trieda, je definovaná len špecifikácia pre objekt; nie je pridelená žiadna pamäť ani úložisko. Ak chcete použiť funkcie údajov a prístupu definované v triede, musíte vytvoriť objekty.



Syntax

ClassName ObjectName;>

Prístup k dátovým členom a členským funkciám : K údajovým členom a členským funkciám triedy možno pristupovať pomocou operátora bodka(‘.’) s objektom. Napríklad, ak je názov objektu obj a chcete získať prístup k členskej funkcii s menom printName() potom budeš musieť napísať obj.printName() .

Prístup k dátovým členom

K členom s verejnými údajmi sa tiež pristupuje rovnakým spôsobom, avšak k členom so súkromnými údajmi nie je povolený priamy prístup objektu. Prístup k dátovému členu závisí výlučne od riadenia prístupu daného dátového člena. Toto riadenie prístupu je dané modifikátormi Access v C++. Existujú tri modifikátory prístupu: verejné, súkromné ​​a chránené .

C++




chytiť a vyskúšať javu



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

>

>

Výkon

Geekname is:Abhi>

Členské funkcie v triedach

Existujú 2 spôsoby, ako definovať členskú funkciu:

  • Definícia vnútornej triedy
  • Definícia mimo triedy

Na definovanie členskej funkcie mimo definície triedy musíme použiť rozlíšenie rozsahu:: operátor spolu s názvom triedy a názvom funkcie.

lexikograficky

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

>

>

Výkon

Geekname is: xyz Geek id is: 15>

Všimnite si, že všetky členské funkcie definované v definícii triedy sú štandardne v rade , ale môžete tiež vložiť akúkoľvek netriednu funkciu pomocou kľúčového slova inline s nimi. Inline funkcie sú skutočné funkcie, ktoré sa počas kompilácie skopírujú všade, ako napríklad makro predprocesora, takže réžia volaní funkcií je znížená.

Poznámka: Vyhlásenie a funkcia priateľa je spôsob, ako poskytnúť súkromný prístup k nečlenskej funkcii.

Konštruktéri

Konštruktéri sú špeciálne členy triedy, ktoré kompilátor volá vždy, keď sa vytvorí inštancia objektu tejto triedy. Konštruktory majú rovnaký názov ako trieda a môžu byť definované vo vnútri alebo mimo definície triedy. Existujú 3 typy konštruktérov:

C++




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

>

>

Výkon

Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>

A Kopírovať konštruktor vytvorí nový objekt, ktorý je presnou kópiou existujúceho objektu. Kompilátor poskytuje predvolený konštruktor kopírovania všetkým triedam.

anotácie v jarných topánkach

Syntax:

class-name (class-name &){}>

ničiteľov

Ničiteľ je ďalšia špeciálna členská funkcia, ktorú volá kompilátor, keď sa skončí rozsah objektu.

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>

>

pridať do poľa v jazyku Java

>

Výkon

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>

Zaujímavý fakt (zriedkavý známy koncept)

Prečo dávame na konci hodiny bodkočiarku?

Mnoho ľudí by mohlo povedať, že je to základná syntax a na konci triedy by sme mali dať bodkočiarku, ako to definuje jej pravidlo v cpp. Ale hlavným dôvodom, prečo sú na konci triedy bodkočiarky, je kontrola kompilátora, či sa používateľ pokúša vytvoriť inštanciu triedy na jej konci.

Áno, rovnako ako štruktúra a spojenie, môžeme tiež vytvoriť inštanciu triedy na konci tesne pred bodkočiarkou. Výsledkom je, že keď spustenie dosiahne tento riadok, vytvorí triedu a pridelí pamäť vašej inštancii.

C++




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

>

>

Výkon

java matematický pow
Default Constructor>

Vidíme, že sme vytvorili inštanciu triedy Demo s názvom inštancie, výsledkom čoho je, že sa volá predvolený konštruktor.

Podobne môžeme tiež zavolať parametrizovaný konštruktor len tak, že sem zadáme hodnoty

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

>

>

Výkon

parameterized Constructor values-100 200>

Takže vytvorením inštancie tesne pred bodkočiarkou môžeme vytvoriť inštanciu triedy.

Súvisiace články:

  • Viacnásobná dedičnosť v C++
  • Čistý virtuálny ničiteľ
  • C++ kvíz