classes objects c
Kratek uvod v razrede in predmete v jeziku C ++.
Razredi in predmeti so gradniki objektno usmerjenega programiranja v jeziku C ++. Vsako entiteto, živo ali neživo, je mogoče predstaviti kot objekt in ustrezno programirati s pomočjo C ++. Tako lahko entitete, kot so avto, miza, oseba, ptica, žival itd., Predstavljamo kot predmete.
Razred je raven višja od predmeta in predstavlja kategorijo predmetov. Tako razred deluje kot načrt, ki opisuje zasnovo predmeta in podrobnosti. Sem spadajo podatki, ki se uporabljajo za opis predmeta, in različne metode ali funkcije, ki lahko delujejo na podatke o objektu.
=> Tukaj bodite pozorni na preprosto vadbeno serijo C ++.
V tej vadnici bomo obravnavali vse podrobnosti o razredu in predmetih v jeziku C ++ ter njihovo programsko predstavitev.
Kaj se boste naučili:
- Predavanja
- Predmeti
- Dostopni podatki
- Konstruktorji
- Vrste konstruktorjev
- Operator dodelitve
- Uničevalci
- 'Ta' kazalec
- Zaključek
- Priporočeno branje
Predavanja
Razred v jeziku C ++ lahko obravnavamo kot načrt ali okostje določene entitete. Razred je uporabniško določen podatkovni tip. Vsebuje splošne informacije ali podatke za določeno entiteto in funkcije, ki delujejo na to entiteto.
V sintaksi C ++ definiramo razred s ključno besedo 'class', ki ji sledi ime razreda.
Imenu razreda sledijo podrobnosti o razredu, ki so zavite v zavite oklepaje in se zaključi s podpičjem.
Naslednji blok prikazuje splošno sintakso za definicijo razreda.
Kot je prikazano v zgornji predstavitvi, ima lahko razred določevalce dostopa, kot so javni / zaščiteni / zasebni. Lahko ima člane za podatke in funkcije članov. Podatki in funkcije so poklicani kot člani razreda. Privzeto so člani zasebni za razred, tako da nobena zunanja entiteta nima dostopa do teh članov.
Na primer, vozilo je lahko generaliziran razred z lastnostmi, kot so model, barva, številka šasije, povprečna_hitrost itd. Lahko ima funkcije, kot so changeModel, pospeševanje, upočasnitev itd., ki izvajajo dejanja na podatkovnih članih. Določimo lahko razred z imenom „vozilo“, ki bo imel vse te podatke in funkcije.
Kot smo že omenili, je razred samo načrt za entitete. Ko je definiran, ne zavzame prostora v spominu. Da bo razred funkcionalen, moramo definirati predmete, ki lahko uporabljajo člane razreda.
Predmeti
Če želimo uporabiti funkcionalnost razreda, moramo primer ustvariti za ustvarjanje predmeta. Predmet je primerek razreda. Z enostavnimi besedami lahko rečemo, da je objekt spremenljivka tipa razreda.
Splošna sintaksa za ustvarjanje predmeta je:
classname object_name;
Ko je objekt ustvarjen, ga lahko uporabljamo za dostop do podatkovnih članov in funkcij tega razreda.
Dostop do članov razreda (podatkov in funkcij) poteka z uporabo operatorja pika (.), Ki se imenuje tudi operater za dostop članov.
Če je obj ime predmeta in je v razredu funkcija “display ()”, je do funkcije mogoče dostopati kot “obj.display ()”.
Vendar se v zgornji izjavi skriva ulov. Do funkcije display () lahko dostopamo s pomočjo predmeta in operatorja pik, če je funkcija 'javna'.
Dostopni podatki
V jeziku C ++ je dostop do podatkovnih članov in funkcij v razredu odvisen od dostopa do določenega podatkovnega člana ali funkcije z uporabo specifikatorja dostopa.
C ++ podpira naslednje specifikatorje dostopa:
# 1) Zasebno
To je privzeti specifikator dostopa za razred v jeziku C ++. To pomeni, da če za člane v razredu ni določen noben specifikator dostopa, se šteje za zasebnega.
Če je član zaseben, ga ni mogoče dostopati zunaj predavanja. Niti z uporabo predmeta in operatorja pik. Do članov zasebnih podatkov je mogoče dostopati samo z uporabo funkcij člana razreda.
brezplačna zaščita požarnega zidu za Windows 10
Vendar je pri tem pravilu izjema, o kateri bomo razpravljali v naslednjih temah.
# 2) Javno
Podatkovni član ali funkcija, ki je v razredu opredeljena kot javna, je dostopna vsem zunaj razreda. Do teh članov je mogoče dostopati s pomočjo predmeta in operatorja pik.
# 3) Zaščiteno
Zaščiteni član razreda je dostopen samemu razredu in otroškim razredom tega razreda.
Ta specifikator dostopa se uporablja zlasti v primeru dedovanja in o tem bomo podrobno razpravljali med temo dedovanja.
Vzemimo naslednji primer, da bomo bolje razumeli te specifikatorje dostopa.
#include #include using namespace std; class ABC{ int var1 = 10; public: string name; void display() { cout<<'var1 ='< Izhod:
var1 = 10
ime = sth
V tem programu imamo dva podatkovna člana, od katerih je var1 tipa int zaseben (specifikator dostopa ni določen. Privzeto je zasebno). Drugi član je ime niza, ki je razglašeno za javno. Imamo še en funkcijski zaslon, ki prikazuje vrednost obeh članov.
V glavni funkciji razglasimo objekt abc razreda ABC. Nato nastavimo vrednosti za podatkovne člane in tudi prikaz funkcije klica z uporabo predmeta 'abc'.
Ko pa prevajalnik naleti na vrstico abc.var1 = 20; ustvaril bo napako, da je »var1 zasebna spremenljivka«.
To je zato, ker ne moremo dostopati do članov zasebnih podatkov razreda zunaj razreda. Tako pride do napake. Do njega pa lahko pridemo znotraj funkcije in torej, ko v funkciji zaslona izpišemo vrednost var1; ne vrže nobene napake.
Izhod programa torej prikaže začetno vrednost, s katero je deklarirana var1.
Do sedaj smo videli podrobnosti o razredih, predmetu in specifikacijah dostopa, zdaj pa si oglejmo celoten primer vzorčnega študenta predavanja. Ta razred ima člane s podatki: student_id, student_name in student_age. Ima tudi funkcije članov za branje informacij o študentu in prikaz informacij o študentu.
Da bi bralcem olajšali stvari, smo vse člane razreda razglasili za javne.
Naslednji program prikazuje popolno izvedbo.
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; void read_studentInfo(); void print_studentInfo() { cout<<'
Student ID : '<student_id; cout<>student_name; cout<>student_age; } int main() { student s1; s1.read_studentInfo(); s1.print_studentInfo(); }
Izhod:
Vnesite ID študenta: 1
Vnesite ime študenta: abc
dvojno povezana izvedba seznama c ++
Vnesite student_age: 12
Študentska izkaznica: 1
Ime študenta: abc
Študentska starost: 12
Tako imamo zgoraj definiran popoln razred. Edina opazna razlika je v tem, da smo znotraj razreda definirali eno funkcijo 'print_studentInfo', medtem ko je druga funkcija 'read_studentinfo' definirana zunaj razreda. To sta dva načina, na katere je mogoče določiti funkcije člana za razred.
Upoštevajte, da ima funkcija, ki je definirana zunaj, še vedno deklaracijo / prototip znotraj razreda. Prav tako je definiran zunaj razreda z uporabo operater ločljivosti obsega (: :) . Nato v glavni funkciji izdelamo predmet študentskega razreda in nato pokličemo funkcije za branje in prikaz podatkov.
Konstruktorji
Do zdaj smo v tej vadnici ustvarili preprost objekt in nato vsakemu podatkovnemu članu razreda v glavni funkciji dodelimo vrednosti po branju teh vrednosti iz standardnega vhoda.
V tej temi si bomo ogledali posebno funkcijo, ki se uporablja za inicializacijo predmeta med njegovim ustvarjanjem. Ta posebna funkcija se imenuje konstruktor.
Konstruktor je funkcija člana razreda, vendar se od običajne funkcije člana razlikuje na naslednje načine:
- Konstruktor nima vrnjene vrednosti, torej konstruktor nikoli ne vrne vrednosti.
- Je javna članska funkcija razreda.
- Uporablja se za inicializacijo podatkovnih članov in konstruiranje predmeta razreda.
- Predelovalec ga samodejno pokliče, ko se objekt ustvarja.
Vrste konstruktorjev
C ++ podpira naslednje vrste konstruktorjev.
# 1) Privzeti konstruktor
Privzeti konstruktor je osnovni konstruktor in nima parametrov. Z uporabo privzetega konstruktorja lahko ustvarimo preprost objekt brez kakršnih koli parametrov.
Privzeti konstruktor ima naslednjo sintakso:
classname() { //constructor code }
Če razred nima privzetega konstruktorja, ga ustvari prevajalnik.
# 2) Parametrizirani konstruktor
Parametrizirani konstruktor je tisti, ki ima seznam parametrov, s pomočjo katerega lahko inicializiramo člane razreda. Ko deklariramo objekt v parametriziranem konstruktorju, moramo funkciji konstruktorja posredovati začetne vrednosti kot parametre.
Parametrizirana konstruktorska funkcija je videti, kot je prikazano spodaj.
classname(argument list){ //constructor code }
Parametrizirani konstruktor se uporablja za preobremenitev konstruktorjev. Več o preobremenjenosti bomo videli v naših poznejših temah.
Parametrizirani konstruktor se uporablja za inicializacijo podatkovnih članov različnih predmetov. Pri tem lahko različnim predmetom posredujemo različne vrednosti podatkovnih članov.
# 3) Konstruktorji za kopiranje
C ++ podpira tretjo vrsto konstruktorja, znanega kot konstruktor kopiranja. Njegova splošna oblika je
ime razreda (const ime_razreda & obj);
Kot je prikazano v zgornji izjavi, se v konstruktorju kopij ustvari nov objekt z uporabo vrednosti drugega predmeta istega razreda. Parameter, ki se posreduje konstruktorju, je stalna referenca predmeta, katerega vrednosti bodo uporabljene za konstrukcijo novega predmeta.
Konstruktor kopij se običajno pokliče v naslednjih primerih:
- Ko predmet predmeta vrne vrednost.
- Ko se objekt preda funkciji kot argument in se pošlje po vrednosti.
- Ko je objekt zgrajen iz drugega predmeta istega razreda.
- Ko prevajalnik ustvari začasni objekt.
Vendar ne moremo zagotoviti, da bo v vseh zgornjih primerih zagotovo poklican konstruktor kopij, saj ima prevajalnik C ++ način za optimizacijo kopiranja.
Konstruktor kopiranja izvede kopiranje v članih med predmeti. Tako kot privzeti konstruktor, tudi prevajalnik C ++ ustvari privzeti konstruktor kopij, če ga v našem programu ne zagotovimo. Ko pa ima razred določene člane podatkov, kot so kazalci, sklici ali kakršna koli dodelitev sredstev med izvajanjem, moramo imeti svoj uporabniško določen konstruktor kopij.
Razlog je v tem, da privzeti konstruktor kopij izvede le plitvo kopijo podatkovnih članov, torej si bosta oba predmeta delila isto pomnilniško mesto. To je v redu za preproste člane podatkov brez kazalca.
Ko pa gre za kazalce ali katere koli druge člane dinamičnih podatkov, želimo, da so podatki usmerjeni na novo pomnilniško mesto. To je globoka kopija in jo je mogoče doseči samo z uporabniško določenim konstruktorjem kopij.
Spodaj je podan popoln program C ++, ki izvaja vse tri vrste konstruktorjev in njihovo uporabo pri konstruiranju predmeta.
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; //default constructor student(){ student_id = 1; student_name = 'abc'; student_age = 10; } //parameterized constructor student(int id,string name,int age){ student_id = id; student_name = name; student_age = age; } //copy constructor student(const student& st){ student_id = st.student_id; student_name = st.student_name; student_age = st.student_age; } void print_studentInfo() { cout<<'
Student ID : '< Izhod:
********** s **********
Študentska izkaznica: 1
Ime študenta: abc
Študentska starost: 10
********** s2 **********
Študentska izkaznica: 2
Ime študenta: xyz
Študentska starost: 12
Posnetek zaslona za isto je spodaj.
V tem programu smo določili študenta, ki je podoben tistemu iz prejšnjega programa. Razlika je v tem, da namesto branja vrednosti podatkovnih podatkov s standardnega vnosa skozi funkcijo določimo tri konstruktorje.
Absolutno je mogoče, da ima razred več konstruktorjev. Imamo privzeti konstruktor, ki inicializira člane podatkov na začetne vrednosti. Nato definiramo parametrizirani konstruktor, ki konstruktorju posreduje začetne vrednosti kot parametre.
Nato definiramo konstruktor kopij, ki mu posredujemo konstantno referenco na predmet študentskega razreda.
V glavni funkciji ustvarimo tri predmete ločeno s pomočjo treh konstruktorjev. Prvi objekt s se ustvari s privzetim konstruktorjem. Drugi objekt s1 se ustvari s pomočjo parametriziranega konstruktorja, tretji objekt s2 pa s konstruktorjem kopiranja.
Upoštevajte ustvarjanje tretjega predmeta s2. Tu dodamo že ustvarjeni objekt s1 novemu objektu s2. Ko torej konstruiramo nov objekt z uporabo že obstoječega predmeta, prevajalnik pokliče konstruktor kopije.
Operator dodelitve
Vrednosti enega predmeta lahko dodelimo tudi drugemu s pomočjo operatorja dodelitve (=). V tem primeru bomo imeli izjavo, kot je s1 = s.
Razlika med konstruktorjem kopij in operaterjem dodelitve je v tem, da medtem ko konstruktor kopiranja v celoti sestavi nov objekt, operater dodelitve samo dodeli vrednosti člana predmeta na RHS vrednosti predmeta na LHS. To pomeni, da morajo biti pred dodelitvijo predmeti na obeh straneh operaterja dodelitve.
Uničevalci
Destruktor je prav tako posebna funkcija, kot je konstruktor, vendar izvaja funkcionalnost, ki je povsem nasprotna konstruktorju. Medtem ko se konstruktor uporablja za ustvarjanje predmeta, se destruktor uporablja za uničenje ali brisanje predmeta.
Nekatere značilnosti destruktorja vključujejo:
- Ime destruktorja je enako imenu razreda, vendar se začne z znakom tilde (~).
- Destructor nima vrste vrnitve.
- Destruktor nima argumentov.
- V razredu je lahko samo en destruktor.
- Prevajalnik vedno ustvari privzeti destruktor, če ga za razred ne zagotovimo.
Splošna sintaksa destruktorja je:
~classname(){ //cleanup code }
Destruktor razreda se običajno pokliče v naslednjih situacijah:
- Ko objekt izstopi iz obsega, se samodejno pokliče destruktor razreda.
- Podobno se pokliče destruktor, ko program zaključi izvajanje. To pomeni, da tudi vsi predmeti prenehajo obstajati. Zato bo poklican destruktor vsakega predmeta.
- Destruktor razreda se pokliče tudi, ko se izvrši operater 'delete' za brisanje predmeta.
- Destruktor lahko tudi izrecno pokličemo, da izvede kakršne koli dejavnosti čiščenja, ko končamo s funkcijo predmeta.
Spodnji primer prikazuje delovanje destruktorja.
#include using namespace std; class sample{ public: sample(){ cout<<'Constructor::sample called'< Izhod:
Konstruktor :: vzorec poklican
To je vzorec razreda
Destructor :: ~ poklican vzorec
Posnetek zaslona za zgornji rezultat je podan spodaj.
Določili smo vzorec razreda, v katerem smo definirali konstruktor, destruktor in prikaz funkcije. V glavni funkciji ustvarimo objekt obj vzorca razreda in nato pokličemo funkcijo prikaza tega predmeta.
Po tem se izvede vrnitev 0. V izhodu lahko vidimo, da se destruktor izvrši v trenutku, ko se funkcija prikaza prikaže in programska kontrola pride do stavka return 0. To pomeni, da se izvede v trenutku, ko objekt izstopi iz obsega.
'Ta' kazalec
C ++ uporablja poseben koncept, povezan s predmeti, ki je znan kot 'ta' kazalec. Kazalec “this” vedno kaže na trenutni objekt. Torej, odvisno od situacije, kadar koli se moramo sklicevati na trenutni objekt, uporabimo kazalec “this”.
Vemo, da se vsakič, ko se ustvari primerek razreda, tj. Objekt, za objekt naredi ločena kopija podatkovnih članov razreda. Toda ko gre za članske funkcije razreda, imajo vsi predmeti isto kopijo.
vhodni izhod datoteke c ++
Ko torej en ali več predmetov hkrati dostopa do funkcij članov, kako potem zagotoviti, da funkcije članov dostopajo in spreminjajo ustrezne člane podatkov?
Tu začne kazalec 'ta' kazalec delovati. Prevajalnik posreduje implicitni kazalec z imenom funkcije kot »to«. To se imenuje kazalec 'ta'.
Kazalec “this” se posreduje kot skriti argument vsem klicem funkcije člana. Običajno gre za lokalno spremenljivko. Zato je kazalec »ta« konstanten kazalec in njegova vsebina je pomnilniški naslov trenutnega predmeta.
Upoštevajte, da je ta kazalnik na voljo samo za nestatične funkcije članov in ne za statične funkcije. To je zato, ker do statičnih funkcij ni treba dostopati s pomočjo predmeta. Do njih je mogoče neposredno dostopati z imenom razreda.
Kazalec “this” običajno uporabimo v primerih, ko se spremenljivke člana in parametri posredujejo za inicializacijo spremenljivk članov, ki imajo isto ime. Uporabljamo ga tudi, ko moramo iz funkcije vrniti trenutni objekt.
Oglejmo si prikaz tega kazalca spodaj.
#include using namespace std; class Sample { private: int num; char ch; public: Sample &setParam(int num, char ch){ this->num =num; this->ch = ch; return *this; } void printValues(){ cout<<'num = '< Izhod:
število = 100
ch = A
V zgornjem programu imamo razred z imenom Sample z dvema podatkovnima članoma num in ch. Imamo funkcijo člana setParam, ki posreduje parametre z enakimi imeni, num in ch, da nastavi vrednosti spremenljivk člana.
Znotraj funkcije te vrednosti dodelimo trenutnim spremenljivkam člana objekta, ki jih označuje ta kazalnik. Ko so vrednosti nastavljene, se iz funkcije vrne trenutni objekt »to«.
V glavni funkciji najprej ustvarimo objekt razreda Sample, obj in pokličemo funkcijo setParam za nastavitev vrednosti, nato pa pokličemo funkcijo printValues za tiskanje vrednosti.
Zaključek
V tej vadnici smo se naučili osnovnih gradnikov OOP v jeziku C ++. Razumevanje razredov in predmetov je za začetek primarna zahteva OOP v jeziku C ++. Podrobno smo s primeri spoznali tudi konstruktorje in destruktorje.
V naši prihajajoči vadnici bomo spoznali sezname inicializatorjev v jeziku C ++.
=> Tukaj bodite pozorni na preprosto vadbeno serijo C ++.
Priporočeno branje
- Koncepti OOP-jev Python (razredi, predmeti in dedovanje Python)
- Vadnica Java vmesnika in abstraktnega razreda s primeri
- Delo s predmeti VBScript Excel
- QTP Vadnica št. 7 - Paradigma identifikacije predmetov QTP - Kako QTP enolično prepozna predmete?
- Skladišče objektov v QTP - Vadnica št. 22
- Delo z VBScript ADODB Connection Objects
- Polimorfizem med izvajanjem v jeziku C ++
- Dedovanje v jeziku C ++