classes objects c
Stručný úvod do tříd a objektů v C ++.
Třídy a objekty jsou stavebními kameny objektově orientovaného programování v C ++. Každá entita, živá i neživá, může být reprezentována jako objekt a odpovídajícím způsobem programována pomocí C ++. Subjekty jako auto, stůl, osoba, pták, zvíře atd. Lze tedy představovat jako objekty.
Třída je o úroveň vyšší než objekt a představuje kategorii objektů. Třída tedy funguje jako plán, který nastiňuje design objektu a detaily. To zahrnuje data, která se používají k popisu objektu, a různé metody nebo funkce, které mohou na data objektu působit.
=> Dávejte pozor na jednoduchou sérii školení C ++ zde.
V tomto kurzu probereme všechny podrobnosti třídy a objektů v C ++ spolu s jejich programovým vyjádřením.
Co se naučíte:
- Třídy
- Objekty
- Specifikátory přístupu
- Konstruktéři
- Typy konstruktérů
- Operátor přiřazení
- Ničitelé
- „Tento“ ukazatel
- Závěr
- Doporučené čtení
Třídy
Třídu v C ++ lze zobrazit jako plán nebo kostru konkrétní entity. Třída je uživatelem definovaný datový typ. Obsahuje obecné informace nebo data pro danou entitu a funkce, které na této entitě fungují.
V syntaxi C ++ definujeme třídu s klíčovým slovem „class“ následovaným názvem třídy.
Za názvem třídy následují podrobnosti o třídě uzavřené do složených závorek a je ukončen středníkem.
Následující blok ukazuje obecnou syntaxi pro definici třídy.
Jak je znázorněno ve výše uvedené reprezentaci, třída může mít specifikátory přístupu, jako je public / protected / private. Může mít datové členy a členské funkce. Data a funkce se nazývají jako členové třídy. Ve výchozím nastavení jsou členové soukromé pro třídu, takže k těmto členům nemá přístup žádná vnější entita.
Například, vozidlo může být zobecněná třída s vlastnostmi jako model, barva, číslo podvozku, průměrná rychlost atd. Může mít funkce jako changeModel, akcelerace, zpomalení atd., které provádějí akce s datovými členy. Můžeme definovat třídu s názvem „vozidlo“, která bude mít všechny tyto datové členy a funkce.
Jak již bylo zmíněno, třída je pouze plánem pro entity. Pokud je definováno, nezabere to místo v paměti. Aby byla třída funkční, musíme definovat objekty, které mohou využívat členy třídy.
Objekty
Aby bylo možné používat funkčnost třídy, musíme vytvořit instanci třídy pro vytvoření objektu. Objekt je instancí třídy. Jednoduše řečeno, můžeme říci, že objekt je proměnná třídy typu.
Obecná syntaxe pro vytvoření objektu je:
classname object_name;
Jakmile je objekt vytvořen, lze jej použít pro přístup k datovým členům a funkcím dané třídy.
Přístup k členům třídy (datům a funkcím) se provádí pomocí operátoru dot (.), Který se také nazývá jako operátor přístupu členů.
Pokud obj je název objektu a ve třídě je funkce „display ()“, lze k této funkci přistupovat jako „obj.display ()“.
Ve výše uvedeném prohlášení je však úlovek. K funkci display () můžeme přistupovat pomocí objektu a tečkového operátoru, pokud je funkce „public“.
Specifikátory přístupu
V C ++ přístup k datovým členům a funkcím ve třídě závisí na přístupu uděleném danému datovému členu nebo funkci pomocí specifikátoru přístupu.
C ++ podporuje následující specifikátory přístupu:
# 1) Soukromé
Toto je výchozí specifikátor přístupu pro třídu v C ++. To znamená, že pokud pro členy ve třídě není zadán žádný specifikátor přístupu, bude považován za soukromý.
Když je člen soukromý, nelze k němu přistupovat mimo třídu. Dokonce ani použití objektu a operátoru tečky. K soukromým datovým členům lze přistupovat pouze pomocí členských funkcí třídy.
který web poskytuje recenzi o softwaru pro čištění registru
Z tohoto pravidla však existuje výjimka, o které budeme diskutovat v našich pozdějších tématech.
# 2) Veřejné
Datový člen nebo funkce, která je ve třídě definována jako veřejná, je přístupná všem mimo třídu. K těmto členům lze přistupovat pomocí objektu a operátoru tečky.
# 3) Chráněno
Chráněný člen třídy je přístupný samotné třídě a podřízeným třídám této třídy.
Tento specifikátor přístupu se používá zejména v případě dědičnosti a budeme o tom podrobně diskutovat při diskusi o dědičném tématu.
Vezměme si následující příklad, abychom lépe porozuměli těmto specifikátorům přístupu.
#include #include using namespace std; class ABC{ int var1 = 10; public: string name; void display() { cout<<'var1 ='< Výstup:
var1 = 10
jméno = něco
V tomto programu máme dva datové členy, z nichž var1 typu int je soukromý (specifikátor přístupu není zadán. Výchozí je soukromý). Dalším členem je název řetězce, který je deklarován jako veřejný. Máme ještě další funkční displej, který zobrazuje hodnotu obou těchto členů.
V hlavní funkci deklarujeme objekt abc třídy ABC. Poté nastavíme hodnoty na datové členy a také zobrazení funkce volání pomocí objektu ‚abc '.
Když však kompilátor narazí na řádek abc.var1 = 20; vygeneruje chybu, že „var1 je soukromá proměnná“.
Je to proto, že nemůžeme přistupovat k soukromým datovým členům třídy mimo třídu. Existuje tedy chyba. Ale můžeme k němu přistupovat uvnitř funkce, a proto když na výstupu zobrazíme hodnotu var1 ve funkci displeje; nevyvolá žádnou chybu.
Proto výstup programu zobrazuje počáteční hodnotu, se kterou je deklarována var1.
Zatím jsme viděli podrobnosti o třídách, objektech a specifikátorech přístupu, pojďme nyní vzít úplný příklad studenta ukázkové třídy. Tato třída má datové členy: student_id, student_name a student_age. Má také členské funkce pro čtení informací o studentech a zobrazení informací o studentech.
Abychom čtenářům usnadnili práci, prohlásili jsme všechny členy třídy jako veřejné.
Následující program ukazuje kompletní implementaci.
#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ýstup:
Zadejte ID studenta: 1
Zadejte student_name: abc
Zadejte student_age: 12
ID studenta: 1
Jméno studenta: abc
Věk studenta: 12
Máme tedy definovanou úplnou třídu výše. Jediný pozoruhodný rozdíl je v tom, že jsme definovali jednu funkci „print_studentInfo“ uvnitř třídy, zatímco druhá funkce „read_studentinfo“ je definována mimo třídu. Jedná se o dva způsoby, kterými lze definovat členské funkce pro třídu.
Všimněte si, že funkce, která je definována venku, má uvnitř třídy deklaraci / prototyp. Také je definován mimo třídu pomocí operátor rozlišení oboru (: :) . Pak v hlavní funkci vytvoříme objekt třídy studenta a potom zavoláme funkce ke čtení a zobrazení dat.
Konstruktéři
V tomto tutoriálu jsme zatím vytvořili jednoduchý objekt a poté po načtení těchto hodnot ze standardního vstupu každému datovému členovi třídy v hlavní funkci přiřadíme hodnoty.
V tomto tématu se podíváme na speciální funkci, která se používá k inicializaci objektu během jeho vytváření. Tato speciální funkce se nazývá konstruktor.
Konstruktor je členská funkce třídy, ale liší se od normální členské funkce následujícími způsoby:
- Konstruktor nemá žádnou návratovou hodnotu, tj. Konstruktor nikdy nevrací hodnotu.
- Je to veřejná členská funkce třídy.
- Používá se k inicializaci datových členů a konstrukci objektu třídy.
- Je automaticky volán kompilátorem při vytváření objektu.
Typy konstruktérů
C ++ podporuje následující typy konstruktorů.
# 1) Výchozí konstruktor
Výchozí konstruktor je základní konstruktor a nemá žádné parametry. Můžeme vytvořit jednoduchý objekt bez jakýchkoli parametrů pomocí výchozího konstruktoru.
Výchozí konstruktor má následující syntaxi:
classname() { //constructor code }
Pokud třída nemá výchozí konstruktor, vytvoří jej kompilátor.
nejlepší ide pro python na macu
# 2) Parametrizovaný konstruktor
Parametrizovaný konstruktor je takový, který má seznam parametrů, pomocí kterého můžeme inicializovat členy třídy. Když deklarujeme objekt v parametrizovaném konstruktoru, musíme předat počáteční hodnoty funkci konstruktoru jako parametry.
Funkce parametrizovaného konstruktoru vypadá, jak je znázorněno níže.
classname(argument list){ //constructor code }
Parametrizovaný konstruktor se používá k přetížení konstruktorů. Více o přetížení uvidíme v dalších tématech.
Parametrizovaný konstruktor se používá pro účely inicializace datových členů různých objektů. Přitom můžeme předávat různé hodnoty datových členů různým objektům.
# 3) Kopírovat konstruktory
C ++ podporuje třetí typ konstruktoru známý jako konstruktor Copy. Jeho obecná forma je
název třídy (const název třídy & obj);
Jak je znázorněno ve výše uvedené deklaraci, v konstruktoru kopie je nový objekt vytvořen pomocí hodnot jiného objektu stejné třídy. Parametr, který je předán konstruktoru, je konstantní odkaz na objekt, jehož hodnoty budou použity pro konstrukci nového objektu.
Konstruktor kopie se obvykle nazývá v následujících situacích:
- Když je objekt třídy vrácen hodnotou.
- Když je objekt předán funkci jako argument a je předán hodnotou.
- Když je objekt konstruován z jiného objektu stejné třídy.
- Když je kompilátorem generován dočasný objekt.
Nemůžeme však zaručit, že konstruktor kopírování bude jistě volán ve všech výše uvedených případech, protože kompilátor C ++ má způsob, jak optimalizovat operace kopírování.
Konstruktor kopií provádí kopii mezi objekty mezi členy. Stejně jako výchozí konstruktor, kompilátor C ++ vytvoří výchozí konstruktor kopie, pokud jej v našem programu neposkytujeme. Ale když má třída určité datové členy, jako jsou ukazatele, odkazy nebo jakékoli přidělení běhových prostředků, pak musíme mít svůj vlastní konstruktor kopírování definovaný uživatelem.
Důvodem je, že výchozí konstruktor kopírování provádí pouze mělkou kopii datových členů, tj. Oba objekty budou sdílet stejné umístění paměti. To je v pořádku pro jednoduché datové členy bez ukazatele.
Pokud však jde o ukazatele nebo jiné dynamické datové členy, chtěli bychom, aby data směřovala na nové místo v paměti. Toto je hluboká kopie a lze ji dosáhnout pouze pomocí konstruktoru kopie definovaného uživatelem.
Níže je uveden kompletní program C ++, který implementuje všechny tři typy konstruktorů a jejich použití při konstrukci 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ýstup:
********** s **********
ID studenta: 1
Jméno studenta: abc
Věk studenta: 10
********** s2 **********
ID studenta: 2
Jméno studenta: xyz
Věk studenta: 12
Screenshot stejného obrázku je uveden níže.

V tomto programu jsme definovali studenta třídy, který je podobný tomu definovanému v předchozím programu. Rozdíl je v tom, že místo čtení hodnot datových členů ze standardního vstupu prostřednictvím funkce definujeme tři konstruktory.
Je absolutně možné, aby třída měla více než jednoho konstruktora. Máme výchozí konstruktor, který inicializuje datové členy na počáteční hodnoty. Dále definujeme parametrizovaný konstruktor, který předává počáteční hodnoty jako parametry konstruktoru.
Dále definujeme konstruktor kopírování, kterému předáme konstantní odkaz na objekt třídy studenta.
V hlavní funkci vytvoříme tři objekty samostatně pomocí tří konstruktorů. První objekt s je vytvořen pomocí výchozího konstruktoru. Druhý objekt s1 je vytvořen pomocí parametrizovaného konstruktoru, zatímco třetí objekt s2 je vytvořen pomocí konstruktoru kopírování.
Všimněte si vytvoření třetího objektu s2. Zde přiřadíme již vytvořený objekt s1 novému objektu s2. Když tedy konstruujeme nový objekt pomocí již existujícího objektu, kompilátor zavolá konstruktor kopírování.
Operátor přiřazení
Můžeme také přiřadit hodnoty jednoho objektu k druhému pomocí operátoru přiřazení (=). V tomto případě budeme mít příkaz jako s1 = s.
Rozdíl mezi konstruktorem kopírování a operátorem přiřazení spočívá v tom, že zatímco konstruktor kopírování konstruuje úplně nový objekt, operátor přiřazení pouze přiřadí hodnoty člena objektu na RHS hodnotám objektu na LHS. To znamená, že objekty na obou stranách operátoru přiřazení musí existovat před přiřazením.
c ++ tvrdí se zprávou
Ničitelé
Destruktor je také speciální funkce jako konstruktor, ale implementuje funkce, které jsou přesně opačné než konstruktor. Zatímco konstruktor se používá k vytvoření objektu, destruktor se používá ke zničení nebo odstranění objektu.
Mezi vlastnosti destruktoru patří:
- Název destruktoru je stejný jako název třídy, ale začíná znaménkem tilda (~).
- Destruktor nemá žádný návratový typ.
- Destruktor nemá žádné argumenty.
- Ve třídě může být pouze jeden destruktor.
- Pokud se nám nepodaří poskytnout jeden pro třídu, kompilátor vždy vytvoří výchozí destruktor.
Obecná syntaxe destruktoru je:
~classname(){ //cleanup code }
Destruktor třídy se obvykle nazývá v následujících situacích:
- Když objekt vyjde z rozsahu, automaticky se zavolá destruktor třídy.
- Podobně se destruktor volá, když program dokončí provádění. To znamená, že všechny objekty také přestanou existovat. Proto bude volán destruktor každého objektu.
- Destruktor třídy se také nazývá, když je spuštěn operátor odstranění pro odstranění objektu.
- Můžeme také zavolat destruktor explicitně k provedení jakýchkoli aktivit čištění poté, co jsme hotovi s funkčností objektu.
Níže uvedený příklad ukazuje fungování destruktoru.
#include using namespace std; class sample{ public: sample(){ cout<<'Constructor::sample called'< Výstup:
Volal konstruktor :: ukázka
Toto je ukázková třída
Volal vzorek Destructor :: ~
Screenshot výše uvedeného výstupu je uveden níže.

Definovali jsme ukázku třídy, ve které jsme definovali konstruktor, destruktor a zobrazení funkce. V hlavní funkci vytvoříme objekt obj vzorku třídy a poté zavoláme funkci zobrazení na tomto objektu.
Poté se provede návrat 0. Na výstupu vidíme, že v okamžiku, kdy se funkce zobrazení vrátí a řízení programu přijde na příkaz return 0, se provede destruktor. To znamená, že se provede v okamžiku, kdy objekt vyjde z rozsahu.
„Tento“ ukazatel
C ++ používá speciální koncept vztahující se k objektům, který je známý jako „tento“ ukazatel. Ukazatel „tento“ vždy ukazuje na aktuální objekt. Takže v závislosti na situaci, kdykoli se musíme odvolat na aktuální objekt, použijeme ukazatel „tento“.
Víme, že pokaždé, když je vytvořena instance třídy, tj. Objekt, je pro objekt vytvořena samostatná kopie datových členů třídy. Ale pokud jde o členské funkce třídy, všechny objekty sdílejí stejnou kopii.
Takže když jeden nebo více objektů přistupuje k členským funkcím současně, jak tedy zajistíme, aby členské členy přistupovaly a upravovaly správné datové členy?
Na tomto místě začíná působit „tento“ ukazatel. Kompilátor předá implicitní ukazatel s názvem funkce jako „this“. Tomu se říká „tento“ ukazatel.
Ukazatel „tento“ je předán jako skrytý argument všem voláním členské funkce. Obvykle se jedná o lokální proměnnou. „Tento“ ukazatel je tedy konstantní ukazatel a jeho obsahem je adresa paměti aktuálního objektu.
Tento ukazatel je k dispozici pouze pro nestatické členské funkce a ne pro statické funkce. Je to proto, že ke statickým funkcím není třeba přistupovat pomocí objektu. K nim lze přímo přistupovat pomocí názvu třídy.
Ukazatel „tento“ obvykle používáme v situacích, kdy jsou členské proměnné a parametry předávány k inicializaci členských proměnných, které mají stejný název. Používáme také, když potřebujeme vrátit aktuální objekt z funkce.
Podívejme se níže na ukázku „tohoto“ ukazatele.
#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ýstup:
num = 100
ch = A
Ve výše uvedeném programu máme třídu nazvanou Sample se dvěma datovými členy num a ch. Máme členskou funkci setParam, která předává parametry se stejnými názvy, čísly a ch pro nastavení hodnot členských proměnných.
Uvnitř funkce přiřadíme tyto hodnoty aktuálním proměnným členů objektu označeným tímto ukazatelem. Jakmile jsou hodnoty nastaveny, aktuální objekt „this“ je vrácen z funkce.
V hlavní funkci nejprve vytvoříme objekt třídy Sample, obj a zavoláme funkci setParam, abychom nastavili hodnoty, a potom zavoláme funkci printValues k vytištění hodnot.
Závěr
V tomto kurzu jsme se naučili základní stavební bloky OOP v C ++. Pochopení tříd a objektů jsou primárními požadavky, počínaje OOP v C ++. Na příkladech jsme se také podrobně dozvěděli o konstruktorech a destruktorech.
V našem nadcházejícím kurzu se dozvíme o seznamech inicializátorů v C ++.
=> Dávejte pozor na jednoduchou sérii školení C ++ zde.
Doporučené čtení
- Koncepty OOP Pythonu (třídy, objekty a dědičnost Pythonu)
- Výukový program pro rozhraní Java a abstraktní třídu s příklady
- Práce s objekty VBScript Excel
- Výukový program QTP # 7 - Paradigma identifikace objektů QTP - Jak QTP jednoznačně identifikuje objekty?
- Objektové úložiště v QTP - výuka # 22
- Práce s objekty VBScript ADODB Connection
- Runtime polymorfismus v C ++
- Dědičnost v C ++