classes objects c
Stručný úvod do tried a objektov v C ++.
Triedy a objekty sú stavebnými kameňmi Objektovo orientovaného programovania v C ++. Každá entita, živá aj neživá, môže byť reprezentovaná ako objekt a programovaná podľa toho pomocou C ++. Subjekty ako auto, stôl, osoba, vták, zviera atď. Môžu byť teda znázornené ako objekty.
Trieda je o úroveň vyššie ako objekt a predstavuje kategóriu objektov. Trieda teda funguje ako plán, ktorý načrtáva dizajn objektu a podrobnosti. Patria sem údaje, ktoré sa používajú na popis objektu, a rôzne metódy alebo funkcie, ktoré môžu pôsobiť na údaje o objekte.
=> Dajte si pozor na jednoduchú sériu školení C ++ tu.
V tomto tutoriáli sa venujeme všetkým podrobnostiam tried a objektov v C ++ spolu s ich programovým znázornením.
Čo sa dozviete:
- Triedy
- Predmety
- Špecifikátory prístupu
- Konštruktéri
- Typy konštruktérov
- Operátor pridelenia
- Ničitelia
- „Tento“ ukazovateľ
- Záver
- Odporúčané čítanie
Triedy
Na triedu v C ++ sa dá pozerať ako na plán alebo kostru konkrétnej entity. Trieda je používateľom definovaný dátový typ. Obsahuje všeobecné informácie alebo údaje o konkrétnej entite a funkciách, ktoré na nej pôsobia.
V syntaxe C ++ definujeme triedu pomocou kľúčového slova „class“, za ktorým nasleduje názov triedy.
Za názvom triedy nasledujú podrobnosti o triede uzavreté v zložených zátvorkách a je zakončený bodkočiarkou.
Nasledujúci blok ukazuje všeobecnú syntax pre definíciu triedy.
Ako je znázornené vo vyššie uvedenom znázornení, trieda môže mať špecifikátory prístupu ako verejné / chránené / súkromné. Môže mať dátové členy a členské funkcie. Údaje a funkcie sa nazývajú členmi triedy. Predvolene sú členovia súkromní pre triedu, takže k týmto členom nemá prístup žiadna vonkajšia entita.
Napríklad, vozidlo môže byť zovšeobecnená trieda s vlastnosťami ako model, farba, číslo podvozku, priemerná rýchlosť atď. Môže mať funkcie ako changeModel, akcelerácia, spomalenie atď., ktoré vykonávajú akcie s dátovými členmi. Môžeme definovať triedu s názvom „vozidlo“, ktorá bude mať všetky tieto dátové členy a funkcie.
Ako už bolo spomenuté, trieda je iba vzorom pre entity. Ak je definovaná, nezaberie to miesto v pamäti. Aby bola trieda funkčná, musíme definovať objekty, ktoré môžu využívať členov triedy.
Predmety
Aby sme mohli používať funkčnosť triedy, musíme vytvoriť inštanciu triedy, aby sa vytvoril objekt. Objekt je inštanciou triedy. Jednoduchými slovami, môžeme povedať, že objekt je premenná typovej triedy.
Všeobecná syntax na vytvorenie objektu je:
classname object_name;
Po vytvorení objektu ho možno použiť na prístup k dátovým členom a funkciám tejto triedy.
Prístup k členom triedy (údaje a funkcie) sa vykonáva pomocou operátora dot (.), Ktorý sa tiež nazýva ako operátor prístupu členov.
Ak obj je názov objektu a v triede je funkcia „display ()“, potom je funkcia prístupná ako „obj.display ()“.
Vo vyššie uvedenom vyhlásení je však háčik. K funkcii display () môžeme získať prístup pomocou objektu a bodkového operátora, ak je funkcia „verejná“.
Špecifikátory prístupu
V C ++ závisí prístup k údajovým členom a funkciám v triede od prístupu daného konkrétnemu údajovému členovi alebo funkcii pomocou špecifikátora prístupu.
C ++ podporuje nasledujúce špecifikátory prístupu:
# 1) Súkromné
Toto je predvolený špecifikátor prístupu pre triedu v C ++. To znamená, že ak pre členov v triede nie je zadaný žiadny špecifikátor prístupu, považuje sa to za súkromné.
Ak je člen súkromný, mimo skupiny ho nemožno získať. Ani pomocou objektu a operátora bodky. K súkromným údajovým členom je možné pristupovať iba pomocou členských funkcií triedy.
aký je najlepší e-mail na použitie
Z tohto pravidla však existuje výnimka, o ktorej budeme diskutovať v ďalších témach.
# 2) Verejné
Dátový člen alebo funkcia, ktorá je v triede definovaná ako verejná, je prístupná všetkým mimo triedy. K týmto členom je možné získať prístup pomocou objektu a operátora bodka.
# 3) Chránené
Chránený člen triedy je prístupný samotnej triede a podriadeným triedam tejto triedy.
Tento špecifikátor prístupu sa používa najmä v prípade dedičstva a podrobne si ho rozoberieme pri diskusii o téme dedičstva.
Zoberme si nasledujúci príklad, aby sme lepšie pochopili tieto špecifikátory prístupu.
#include #include using namespace std; class ABC{ int var1 = 10; public: string name; void display() { cout<<'var1 ='< Výkon:
var1 = 10
meno = niečo
V tomto programe máme dvoch dátových členov, z ktorých var1 typu int je súkromný (špecifikátor prístupu nie je zadaný. Predvolené nastavenie je súkromné). Ďalším členom je názov reťazca, ktorý je deklarovaný ako verejný. Máme ešte ďalší funkčný displej, ktorý zobrazuje hodnotu oboch týchto členov.
V hlavnej funkcii deklarujeme objekt abc triedy ABC. Potom nastavíme hodnoty na dátové členy a tiež zobrazenie funkcie volania pomocou objektu ‘abc’.
Keď však kompilátor narazí na riadok abc.var1 = 20; vygeneruje chybu, že „var1 je súkromná premenná“.
Je to preto, že mimo triedy nemôžeme získať prístup k súkromným členom triedy. Takto nastala chyba. Môžeme k nemu však získať prístup vo vnútri funkcie, a preto keď na výstupnej hodnote zobrazujeme hodnotu var1; nehádže to žiadnu chybu.
Preto výstup programu zobrazuje počiatočnú hodnotu, s ktorou je deklarovaná var1.
Doteraz sme videli podrobnosti o triedach, objektoch a špecifikátoroch prístupu, teraz si vezmime kompletný príklad študenta triedy. Táto trieda má dátových členov: student_id, student_name a student_age. Má tiež členské funkcie na čítanie informácií o študentoch a ich zobrazovanie.
Aby sme čitateľom uľahčili prácu, vyhlásili sme všetkých členov triedy za verejných.
Nasledujúci program zobrazuje úplnú implementáciu.
#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(); }
Výkon:
Zadajte ID študenta: 1
Zadajte meno_študenta: abc
Zadajte student_age: 12
ID študenta: 1
Meno študenta: abc
Vek študenta: 12
Máme teda definovanú celú triedu vyššie. Jediný pozoruhodný rozdiel je v tom, že sme vo vnútri triedy definovali jednu funkciu „print_studentInfo“, zatiaľ čo iná funkcia „read_studentinfo“ je definovaná mimo triedy. Toto sú dva spôsoby, ako možno definovať členské funkcie pre triedu.
Všimnite si, že funkcia, ktorá je definovaná vonku, má vnútri triedy ešte deklaráciu / prototyp. Tiež je definované mimo triedy pomocou operátor rozlíšenia rozsahu (: :) . Potom v hlavnej funkcii vytvoríme objekt triedy študenta a potom zavoláme funkcie na čítanie a zobrazovanie údajov.
Konštruktéri
Zatiaľ sme v tomto tutoriáli vytvorili jednoduchý objekt a potom po načítaní týchto hodnôt zo štandardného vstupu priradíme každému údajovému členovi triedy v hlavnej funkcii hodnoty.
V tejto téme sa pozrieme na špeciálnu funkciu, ktorá sa používa na inicializáciu objektu pri jeho vytváraní. Táto špeciálna funkcia sa nazýva konštruktor.
sa nedá pripojiť k predvolenej bráne
Konštruktor je členská funkcia triedy, ale od bežnej členskej funkcie sa líši nasledujúcimi spôsobmi:
- Konštruktor nemá žiadnu návratovú hodnotu, t. J. Konštruktor nikdy nevráti hodnotu.
- Je to verejná členská funkcia triedy.
- Používa sa na inicializáciu dátových členov a na zostavenie objektu triedy.
- Automaticky ho vyvolá kompilátor pri vytváraní objektu.
Typy konštruktérov
C ++ podporuje nasledujúce typy konštruktorov.
# 1) Predvolený konštruktor
Predvolený konštruktor je základný konštruktor a nemá žiadne parametre. Pomocou predvoleného konštruktora môžeme vytvoriť jednoduchý objekt bez akýchkoľvek parametrov.
Predvolený konštruktor má nasledujúcu syntax:
classname() { //constructor code }
Ak trieda nemá predvolený konštruktor, vytvorí ho kompilátor.
# 2) Parametrizovaný konštruktor
Parametrizovaný konštruktor je taký, ktorý má zoznam parametrov, pomocou ktorého môžeme inicializovať členov triedy. Keď deklarujeme objekt v parametrizovanom konštruktore, musíme funkcii konštruktora odovzdať počiatočné hodnoty ako parametre.
Parametrizovaná funkcia konštruktora vyzerá takto:
classname(argument list){ //constructor code }
Na preťaženie konštruktorov sa používa parametrizovaný konštruktor. Viac o preťažení uvidíme v ďalších témach.
Parametrizovaný konštruktor sa používa na účely inicializácie dátových členov rôznych objektov. Pritom môžeme prenášať rôzne hodnoty dátových členov do rôznych objektov.
# 3) Kopírujte konštruktérov
C ++ podporuje tretí typ konštruktora známy ako Copy constructor. Jeho všeobecná forma je
classname (const classname & obj);
Ako je uvedené vo vyššie uvedenej deklarácii, v konštruktore copy je nový objekt vytvorený pomocou hodnôt iného objektu rovnakej triedy. Parameter, ktorý sa odovzdá konštruktoru, je konštantný odkaz na objekt, ktorého hodnoty sa použijú na konštrukciu nového objektu.
Konštruktor kópie sa zvyčajne volá v nasledujúcich situáciách:
- Keď je objekt triedy vrátený hodnotou.
- Keď je objekt odovzdaný funkcii ako argument a je odovzdaný hodnotou.
- Keď je objekt skonštruovaný z iného objektu rovnakej triedy.
- Keď je kompilátorom vygenerovaný dočasný objekt.
Nemôžeme však zaručiť, že kopírovací konštruktor bude určite volaný vo všetkých vyššie uvedených prípadoch, pretože kompilátor C ++ má spôsob, ako optimalizovať operácie kopírovania.
Konštruktér kópie vykonáva členské kopírovanie medzi objektmi. Rovnako ako predvolený konštruktor, aj kompilátor C ++ vytvorí predvolený konštruktor kópií, ak ho v našom programe neposkytujeme. Ale keď má trieda určité dátové členy, ako sú ukazovatele, referencie alebo akákoľvek runtime alokácia zdrojov, potom musíme mať svoj vlastný používateľom definovaný konštruktor kópií.
Dôvod je ten, že predvolený konštruktor kopírovania vykonáva iba plytkú kópiu dátových členov, t. J. Oba objekty budú zdieľať rovnaké miesto v pamäti. To je dobré pre jednoduché dátové členy, ktoré neukazujú.
Pokiaľ však ide o ukazovatele alebo akékoľvek iné dynamické dátové členy, chceli by sme, aby boli dáta nasmerované na nové miesto v pamäti. Toto je hlboká kópia a je možné ju dosiahnuť iba pomocou používateľom definovaného konštruktora kopírovania.
Ďalej je uvedený kompletný program v C ++, ktorý implementuje všetky tri typy konštruktorov a ich použitie pri konštrukcii objektu.
#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 : '< Výkon:
********** s **********
ID študenta: 1
Meno študenta: abc
Vek študenta: 10
********** s2 **********
ID študenta: 2
Meno študenta: xyz
Vek študenta: 12
Screenshot toho istého je uvedený nižšie.
V tomto programe sme definovali študenta triedy, ktorý je podobný tomu, ktorý bol definovaný v predchádzajúcom programe. Rozdiel je v tom, že namiesto čítania hodnôt údajových členov zo štandardného vstupu cez funkciu definujeme tri konštruktory.
Je absolútne možné, že trieda má viac ako jedného konštruktora. Máme predvolený konštruktor, ktorý inicializuje dátové členy na počiatočné hodnoty. Ďalej definujeme parametrizovaný konštruktor, ktorý odovzdáva počiatočné hodnoty ako parametre konštruktoru.
Ďalej definujeme konštruktor kópie, ktorému odovzdáme konštantný odkaz na objekt triedy študenta.
V hlavnej funkcii vytvoríme tri objekty osobitne pomocou troch konštruktorov. Prvý objekt s sa vytvára pomocou predvoleného konštruktora. Druhý objekt s1 sa vytvára pomocou parametrizovaného konštruktora, zatiaľ čo tretí objekt s2 sa vytvára pomocou konštruktora kopírovania.
Všimnite si vytvorenie tretieho objektu s2. Tu priradíme už vytvorený objekt s1 k novému objektu s2. Keď teda zostrojíme nový objekt pomocou už existujúceho objektu, kompilátor zavolá konštruktor kópie.
Operátor pridelenia
Hodnoty jedného objektu môžeme priradiť aj druhému pomocou operátora priradenia (=). V tomto prípade budeme mať príkaz ako s1 = s.
Rozdiel medzi konštruktorom kopírovania a operátorom priradenia spočíva v tom, že zatiaľ čo nástroj na kopírovanie konštruuje úplne nový objekt, operátor priradenia iba priraďuje hodnoty člena objektu na RHS k hodnotám objektu na LHS. To znamená, že objekty na oboch stranách operátora priradenia musia existovať pred priradením.
Ničitelia
Deštruktor je tiež špeciálna funkcia ako konštruktor, ale implementuje funkcionalitu, ktorá je presne oproti konštruktoru. Zatiaľ čo na vytvorenie objektu sa používa konštruktor, na zničenie alebo odstránenie objektu sa používa deštruktor.
Niektoré z charakteristík deštruktora zahŕňajú:
- Názov deštruktora je rovnaký ako názov triedy, ale začína sa vlnovkou (~).
- Destruktor nemá žiadny návratový typ.
- Deštruktor nemá žiadne argumenty.
- V triede môže byť iba jeden deštruktor.
- Kompilátor vždy vytvorí predvolený deštruktor, ak sa nám nepodarí poskytnúť jeden pre triedu.
Všeobecná syntax deštruktora je:
~classname(){ //cleanup code }
Deštruktor triedy sa zvyčajne nazýva v nasledujúcich situáciách:
- Keď objekt vyjde z rozsahu, automaticky sa zavolá deštruktor triedy.
- Podobne sa deštruktor zavolá, keď program dokončí vykonávanie. To znamená, že všetky objekty tiež prestávajú existovať. Preto sa bude nazývať deštruktor každého objektu.
- Deštruktor triedy sa nazýva aj vtedy, keď sa vykoná operátor odstránenia objektu na odstránenie.
- Môžeme tiež explicitne zavolať deštruktor, aby vykonal akékoľvek aktivity vyčistenia, keď skončíme s funkčnosťou objektu.
Nasledujúci príklad demonštruje prácu deštruktora.
#include using namespace std; class sample{ public: sample(){ cout<<'Constructor::sample called'< Výkon:
Konštruktor :: volaná vzorka
Toto je vzorová trieda
Volala vzorka Destructor :: ~
Screenshot vyššie uvedeného výstupu je uvedený nižšie.
Definovali sme ukážku triedy, v ktorej sme definovali konštruktor, deštruktor a zobrazenie funkcií. V hlavnej funkcii vytvoríme objekt obj vzorky triedy a potom zavoláme funkciu zobrazenia na tomto objekte.
Potom sa vykoná návrat 0. Na výstupe vidíme, že v okamihu, keď sa vráti funkcia displeja a riadenie programu príde na príkaz return 0, vykoná sa deštruktor. To znamená, že sa vykoná v okamihu, keď objekt vyjde z rozsahu.
„Tento“ ukazovateľ
C ++ používa špeciálny koncept súvisiaci s objektmi, ktorý je známy ako „tento“ ukazovateľ. Ukazovateľ „tento“ vždy ukazuje na aktuálny objekt. Preto v závislosti na situácii, kedykoľvek sa musíme odvolať na aktuálny objekt, použijeme ukazovateľ „tento“.
Vieme, že zakaždým, keď sa vytvorí inštancia triedy, t. J. Objekt, sa pre objekt vytvorí samostatná kópia dátových členov triedy. Pokiaľ však ide o členské funkcie triedy, všetky objekty zdieľajú rovnakú kópiu.
Takže keď jeden alebo viac objektov pristupuje k členským funkciám súčasne, ako potom zaistíme, aby členské funkcie pristupovali a upravovali správne dátové členy?
Na tomto mieste prichádza do úvahy „tento“ ukazovateľ. Kompilátor odovzdá implicitný ukazovateľ s názvom funkcie ako „tento“. Toto sa nazýva „tento“ ukazovateľ.
Ukazovateľ „tento“ sa odovzdáva ako skrytý argument všetkým volaním členských funkcií. Spravidla ide o lokálnu premennú. Preto je „tento“ ukazovateľ konštantný a jeho obsahom je adresa pamäte aktuálneho objektu.
Upozorňujeme, že tento ukazovateľ je k dispozícii iba pre nestatické členské funkcie a nie pre statické funkcie. Je to tak preto, lebo k statickým funkciám nie je potrebné pristupovať pomocou objektu. Je k nim priamy prístup pomocou názvu triedy.
Ukazovateľ „toto“ zvyčajne používame v situáciách, keď sú členské premenné a parametre odovzdávané, aby sme inicializovali členské premenné, ktoré majú rovnaký názov. Používame ho aj vtedy, keď potrebujeme vrátiť aktuálny objekt z funkcie.
Pozrime sa na ukážku „tohto“ ukazovateľa nižšie.
#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 = '< Výkon:
num = 100
ch = A
Vo vyššie uvedenom programe máme triedu nazvanú Sample s dvoma údajovými členmi num a ch. Máme členskú funkciu setParam, ktorá odovzdáva parametre s rovnakými názvami, číslami a ch, aby nastavila hodnoty členských premenných.
Vo vnútri funkcie priraďujeme tieto hodnoty aktuálnym členským premenným objektu označeným týmto ukazovateľom. Po nastavení hodnôt sa z funkcie vráti aktuálny objekt „this“.
V hlavnej funkcii najskôr vytvoríme objekt triedy Sample, obj a zavoláme funkciu setParam, aby sme nastavili hodnoty, a potom zavoláme funkciu printValues, ktorá tieto hodnoty vytlačí.
Záver
V tomto výučbe sme sa naučili základné stavebné prvky OOP v C ++. Pochopenie tried a objektov je primárnou požiadavkou na začiatok, OOP v C ++. O príkladoch sme sa tiež podrobne dozvedeli o konštruktéroch a deštruktoroch.
najlepší sťahovač mp3 pre Android bez reklám
V našom pripravovanom výučbe sa dozvieme o zoznamoch inicializátorov v C ++.
=> Dajte si pozor na jednoduchú sériu školení C ++ tu.
Odporúčané čítanie
- Koncepty OOP Pythonu (triedy, objekty a dedičnosť Pythonu)
- Príručka k rozhraniu Java a abstraktnej triede
- Práca s objektmi VBScript Excel
- Výukový program QTP # 7 - Paradigma identifikácie objektov QTP - Ako QTP jedinečne identifikuje objekty?
- Objektové úložisko v QTP - príručka č. 22
- Práca s objektmi pripojenia ADODB VBScript
- Runtime polymorfizmus v C ++
- Dedenie v C ++