| Časová náročnost: 20 minut |
Snad nejdůležitějším prvkem jazyka C++ je
třída. Je to mechanismus používaný k vytváření objektů. Jako taková je třída srdcem mnoha prvků jazyka C++.
Třída je deklarována klíčovým slovem
class. Syntaxe deklarace class vypadá v obecném tvaru takto:
|
class jméno-třídy
{
// privátní funkce a proměnné
public:
// veřejné funkce a proměnné
} seznam-objektů
|
Seznam objektů je v deklaraci třídy nepovinný. Stejně jako strukturu, můžeme deklarovat objekty třídy později - až budou potřeba. Zatímco
jméno třídy je také technicky nepovinné, z praktického hlediska je vždy potřeba. Je to proto, že jméno třídy se stává
novým typem jména použitého k deklaraci objektů třídy.
Funkce a proměnné deklarovány uvnitř deklarace třídy jsou označovány jako
členy této třídy. To znamená, že jsou přístupné pouze pro ostatní členy třídy. Pro deklaraci členů veřejné třídy se použije klíčové slovo
public:. Všechny funkce a proměnné takto deklarované jsou přístupné pro
členy třídy a i pro další části programu, který obsahuje třídu.
Příklad jednoduché deklarace třídy.
| Příklad: |
|
class mojetrida
{
int a; // privatni promenna
public:
void nastav_a(int num);
int cti_a();
};
|
Tato třída má pouze jednu privátní proměnnou
a a dvě veřejné funkce
nastav_a(int num) a
cti_a(). Funkce které jsou deklarovány uvnitř třídy se nazývají
členské funkce.
Jelikož
a je privátní není dostupná pro žádný kód vně
mojetrida. Ovšem veřejné funkce mohou být volány každou částí programu, která
mojetrida obsahuje.
Ačkoliv jsou funkce
nastav_a(int num) a
cti_a() deklarovány, nejsou ještě definovány. Abychom definovaly členskou funkci musíme spojit typové jméno třídy se jménem funkce a to pomocí
dvojice dvojteček ::. Dvojice dvojteček se nazývá
operátor rozlišení oblasti.
Ukažme si jak mohou být funkce definovány:
| Příklad: |
|
void mojetrida::nastav_a(int num)
{
a = num;
}
int mojetrida::cti_a()
{
return a;
}
|
Obecný tvar pro definici členské funkce:
|
return-type jméno-třídy::jméno-funkce(seznam-argumentů)
{
// tělo funkce
}
|
Deklarace
mojetrida nedefinueje žádný objekt typu
mojetrida. Definuje pouze typ objektu, když bude deklarován.
Následující řádek deklaruje dva objekty typu mojetrida.
| Příklad: |
|
mojetrida obj1, obj2;
|
Poté co vytvoříme objekt třídy může se program odkazovat na jeho veřejné členy pomocí
tečkových operátorů.
| Příklad: |
|
obj1.nastav_a(10);
obj2.nastav_a(5);
|
Tyto příkazy nastaví kopii
obj1 na 10, kopii
obj2 na 5. Každý objekt obsahuje
vlastní kopii všech dat deklarovaných uvnitř třídy. Tedy
obj1 je odlišné od
a vázaného na
obj2.
|
Deklarace třídy je pouze logická abstrakce, jež definuje nový typ. Určuje, jak bude objekt daného typu vypadat. Teprve deklarace objektu vytváří fyzickou entitu daného typu. Objekt totiž zabírá paměť, ale definiční typ ne.
Každý objekt třídy má svou vlastní kopii každé z proměnných deklarovaných uvnitř třídy.
Následující příklad předvádí třídu mojetrida popsanou výše.
|
| Příklad 2.3. |
|
#include <iostream.h>
class mojetrida
{
int a;
public:
void nastav_a(int num);
int cti_a();
};
void mojetrida::nastav_a(int num)
{
a = num;
}
int mojetrida::cti_a()
{
return a;
}
int main()
{
mojetrida obj1, obj2;
obj1.nastav_a(10);
obj2.nastav_a(5);
cout << obj1.cti_a() << "\n";
cout << obj2.cti_a() << "\n";
return 0;
}
|
| Flashová animace |
|
Kliknutím na ikonu spustíte animaci.
|