Klasė C++ yra statybinis blokas, vedantis į objektinį programavimą. Tai vartotojo apibrėžtas duomenų tipas, turintis savo duomenų narius ir narių funkcijas, kuriuos galima pasiekti ir naudoti sukūrus tos klasės egzempliorių. C++ klasė yra tarsi objekto projektas. Pavyzdžiui: apsvarstykite klasę Automobiliai . Gali būti daug skirtingų pavadinimų ir markių automobilių, tačiau visi jie turės bendrų savybių, kaip ir visi jie turės 4 ratai , Greičio ribojimas , Rida, Taigi čia automobilis yra klasė, o ratai, greičio apribojimai ir rida yra jų savybės.
- Klasė yra vartotojo apibrėžtas duomenų tipas, turintis duomenų narius ir narių funkcijas.
- Duomenų nariai yra duomenų kintamieji, o narių funkcijos yra funkcijos, naudojamos šiais kintamaisiais kartu manipuliuoti. Šie duomenų elementai ir narių funkcijos apibrėžia klasės objektų savybes ir elgesį.
- Aukščiau pateiktame klasės pavyzdyje Automobilis , duomenų narys bus greičio ribojimas , rida, ir tt, o narių funkcijos gali būti stabdžius , didinant greitį, ir tt
An Objektas yra klasės pavyzdys. Kai apibrėžiama klasė, atmintis nepaskirstoma, bet kai ji sukuriama (t. y. sukuriamas objektas), atmintis paskirstoma.
Klasės apibrėžimas ir objektų deklaravimas
Klasė apibrėžiama C++ naudojant raktinį žodį class, po kurio nurodomas klasės pavadinimas. Klasės turinys apibrėžiamas garbanotuose skliaustuose, o pabaigoje užbaigiamas kabliataškiu.
Objektų deklaravimas
Kai apibrėžiama klasė, apibrėžiama tik objekto specifikacija; atmintis ar saugykla nepaskirta. Norėdami naudoti klasėje apibrėžtas duomenų ir prieigos funkcijas, turite sukurti objektus.
Sintaksė
ClassName ObjectName;>
Prieiga prie duomenų narių ir narių funkcijų : klasės duomenų narius ir narių funkcijas galima pasiekti naudojant taško (‘.’) operatorių su objektu. Pavyzdžiui, jei objekto pavadinimas yra obj ir norite pasiekti nario funkciją su vardu printName() tada teks rašyti obj.printName() .
Prieiga prie duomenų narių
Viešųjų duomenų nariai taip pat pasiekiami tokiu pačiu būdu, tačiau privačių duomenų nariams neleidžiama tiesiogiai prieiti prie objekto. Prieiga prie duomenų nario priklauso tik nuo to duomenų nario prieigos kontrolės. Šis prieigos valdymas suteikiamas prieigos modifikatoriais C++. Yra trys prieigos modifikatoriai: viešas, privatus ir saugomas .
C++
pervardykite aplanką „Linux“.
// 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;> }> |
>
>Išvestis
Geekname is:Abhi>
Narių funkcijos klasėse
Yra 2 būdai, kaip apibrėžti nario funkciją:
- Vidinis klasės apibrėžimas
- Už klasės apibrėžimo ribų
Norėdami apibrėžti nario funkciją už klasės apibrėžimo ribų, turime naudoti apimties skiriamoji geba:: operatorius kartu su klasės pavadinimu ir funkcijos pavadinimu.
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; }> |
>
>Išvestis
Geekname is: xyz Geek id is: 15>
Atminkite, kad visos klasės apibrėžime apibrėžtos narių funkcijos yra numatytos eilutę , bet jūs taip pat galite įtraukti bet kurią ne klasės funkciją, naudodami raktinį žodį į eilutę. Įterptosios funkcijos yra tikrosios funkcijos, kurios yra nukopijuojamos visur kompiliavimo metu, kaip ir išankstinio procesoriaus makrokomandos, todėl sumažėja funkcijų iškvietimų išlaidos.
kada buvo išrasta mokykla
Pastaba: Skelbdamas a draugo funkcija yra būdas suteikti privačią prieigą prie ne nario funkcijos.
Konstruktoriai
Konstruktoriai yra specialiosios klasės nariai, kuriuos kompiliatorius iškviečia kiekvieną kartą, kai sukuriamas tos klasės objektas. Konstruktoriai turi tą patį pavadinimą kaip ir klasė ir gali būti apibrėžti klasės apibrėžime arba už jo ribų. Yra 3 konstruktorių tipai:
- Numatytieji konstruktoriai
- Parametrizuoti konstruktoriai
- Kopijuoti konstruktorius
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; }> |
>
>Išvestis
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>
A Kopijavimo konstruktorius sukuria naują objektą, kuris yra tiksli esamo objekto kopija. Kompiliatorius visoms klasėms suteikia numatytąjį kopijavimo konstruktorių.
Sintaksė:
class-name (class-name &){}> naikintojai
Naikintojas yra dar viena speciali nario funkcija, kurią iškviečia kompiliatorius, kai baigiasi objekto apimtis.
C++
pašalinti pirmąjį simbolį Excel
// 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> |
>
>Išvestis
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>
Įdomus faktas (retai žinoma koncepcija)
Kodėl pamokos pabaigoje duodame kabliataškius?
Daugelis žmonių gali pasakyti, kad tai yra pagrindinė sintaksė, todėl klasės pabaigoje turėtume duoti kabliataškį, kaip tai apibrėžia cpp taisyklė. Tačiau pagrindinė priežastis, kodėl klasės pabaigoje yra kabliataškių, yra kompiliatoriaus patikrinimai, ar vartotojas bando sukurti klasės egzempliorių jos pabaigoje.
Taip, kaip ir struktūra ir sąjunga, taip pat galime sukurti klasės egzempliorių pabaigoje prieš pat kabliataškį. Dėl to, kai vykdymas pasiekia tą eilutę, jis sukuria klasę ir priskiria atmintį jūsų egzemplioriui.
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;> }> |
tvarka atsitiktine tvarka sql
>
>Išvestis
Default Constructor>
Matome, kad sukūrėme Demo klasės egzempliorių su pavadinimu egzempliorius, todėl išvestis, kurią matome, yra numatytasis konstruktorius.
Panašiai taip pat galime iškviesti parametrizuotą konstruktorių tiesiog perduodant reikšmes čia
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;> }> |
java grąžinimo komanda
>
>Išvestis
parameterized Constructor values-100 200>
Taigi, sukūrę egzempliorių prieš pat kabliataškį, galime sukurti klasės egzempliorių.
Susiję straipsniai:
- Daugkartinis paveldėjimas C++
- Pure Virtual Destroyer
- C++ viktorina