Klase C++ ir celtniecības bloks, kas noved pie objektorientētas programmēšanas. Tas ir lietotāja definēts datu tips, kuram ir savi datu dalībnieki un dalībnieku funkcijas, kurām var piekļūt un kuras var izmantot, izveidojot šīs klases gadījumu. C++ klase ir kā objekta projekts. Piemēram: Apsveriet klasi Automašīnas . Var būt daudz automašīnu ar dažādiem nosaukumiem un zīmoliem, taču tām visām būs dažas kopīgas īpašības, piemēram, visām tām būs 4 riteņi , Ātruma ierobežojums , Nobraukuma diapazons, utt. Tātad šeit automašīna ir klase, un riteņi, ātruma ierobežojumi un nobraukums ir to īpašības.
- Klase ir lietotāja definēts datu tips, kam ir datu dalībnieki un dalībnieku funkcijas.
- Datu elementi ir datu mainīgie, un locekļu funkcijas ir funkcijas, ko izmanto, lai kopā manipulētu ar šiem mainīgajiem, šie datu elementi un dalībnieku funkcijas nosaka klases objektu īpašības un uzvedību.
- Iepriekš minētajā klases piemērā Automašīna , datu dalībnieks būs ātruma ierobežojums , nobraukums, utt, un dalībnieku funkcijas var būt nospiežot bremzes , palielinot ātrumu, utt.
An Objekts ir klases gadījums. Kad klase ir definēta, atmiņa netiek piešķirta, bet, kad tā ir izveidota (t.i., tiek izveidots objekts), atmiņa tiek piešķirta.
Klases noteikšana un objektu deklarēšana
Klase tiek definēta valodā C++, izmantojot atslēgvārdu class, kam seko klases nosaukums. Klases pamatteksts ir definēts cirtainajās iekavās un beidzas ar semikolu beigās.
Objektu deklarēšana
Kad ir definēta klase, tiek definēta tikai objekta specifikācija; nav piešķirta atmiņa vai krātuve. Lai izmantotu klasē definētos datus un piekļuves funkcijas, ir jāizveido objekti.
Sintakse
ClassName ObjectName;>
Piekļuve datu dalībniekiem un dalībnieku funkcijām : Klases datu dalībniekiem un locekļu funkcijām var piekļūt, izmantojot objekta operatoru dot(‘.’). Piemēram, ja objekta nosaukums ir obj un vēlaties piekļūt dalībnieka funkcijai ar vārdu printName() tad būs jāraksta obj.printName() .
Piekļuve datu dalībniekiem
Tādā pašā veidā tiek piekļūts arī publisko datu dalībniekiem, taču privātajiem datu dalībniekiem objekts nevar tieši piekļūt. Piekļuve datu dalībniekam ir atkarīga tikai no šī datu dalībnieka piekļuves kontroles. Šo piekļuves kontroli nodrošina piekļuves modifikatori programmā C++. Ir trīs piekļuves modifikatori: publisks, privāts un aizsargāts .
C++
uri vs url
// 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;> }> |
>
>Izvade
Geekname is:Abhi>
Dalībnieku funkcijas klasēs
Ir 2 veidi, kā definēt dalībnieka funkciju:
- Klases iekšējā definīcija
- Ārpus klases definīcijas
Lai definētu dalībnieka funkciju ārpus klases definīcijas, mums ir jāizmanto darbības jomas izšķirtspēja:: operators kopā ar klases nosaukumu un funkcijas nosaukumu.
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; }> |
>
>
grandandhraIzvade
Geekname is: xyz Geek id is: 15>
Ņemiet vērā, ka visas klases definīcijā definētās dalībnieku funkcijas ir pēc noklusējuma rindā , taču varat arī iekļaut jebkuru funkciju, kas nav iekļauta klasē, izmantojot atslēgvārdu iekļautā veidā. Iekļautās funkcijas ir faktiskas funkcijas, kuras kompilācijas laikā tiek kopētas visur, piemēram, pirmsprocesora makro, tādējādi tiek samazināta funkciju izsaukšanas izmaksas.
Piezīme: Paziņojot a drauga funkcija ir veids, kā nodrošināt privātu piekļuvi funkcijai, kas nav dalībnieka funkcija.
Konstruktori
Konstruktori ir īpašas klases locekļi, kurus kompilators izsauc katru reizi, kad tiek instantiēts šīs klases objekts. Konstruktoriem ir tāds pats nosaukums kā klasei, un tos var definēt klases definīcijā vai ārpus tās. Ir 3 veidu konstruktori:
- Noklusētie konstruktori
- Parametrētie konstruktori
- Kopēt konstruktori
C++
konvertēt virkni int java
// 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; }> |
>
>Izvade
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>
A Kopēšanas konstruktors izveido jaunu objektu, kas ir precīza esošā objekta kopija. Kompilators nodrošina noklusējuma kopēšanas konstruktoru visām klasēm.
Sintakse:
class-name (class-name &){}> iznīcinātāji
Iznīcinātājs ir vēl viena īpaša dalībnieka funkcija, ko kompilators izsauc, kad objekta darbības joma beidzas.
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> |
>
>Izvade
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>
Interesants fakts (reti zināms jēdziens)
Kāpēc nodarbības beigās dodam semikolu?
Daudzi cilvēki varētu teikt, ka tā ir pamata sintakse, un mums klases beigās ir jāievada semikolu, kā to nosaka cpp. Bet galvenais iemesls, kāpēc klases beigās ir semikoli, ir kompilatoru pārbaudes, vai lietotājs mēģina izveidot klases gadījumu tās beigās.
Jā, tāpat kā struktūra un savienība, mēs varam arī izveidot klases gadījumu beigās tieši pirms semikola. Tā rezultātā, tiklīdz izpilde sasniedz šo līniju, tā izveido klasi un piešķir atmiņu jūsu instancei.
C++
java abstraktā klase
#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;> }> |
>
>Izvade
Default Constructor>
Mēs redzam, ka esam izveidojuši Demo klases gadījumu ar nosaukumu instance, kā rezultātā tiek izsaukta izvade, ko mēs redzam, ir Default Constructor.
masīvs java
Līdzīgi mēs varam arī izsaukt parametrizēto konstruktoru, vienkārši nododot šeit vērtības
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;> }> |
>
>Izvade
parameterized Constructor values-100 200>
Tātad, izveidojot instanci tieši pirms semikola, mēs varam izveidot klases instanci.
Saistītie raksti:
- Daudzkārtēja mantošana valodā C++
- Pure Virtual Destroyer
- C++ viktorīna