Začínáme
Zde se dozvíte jak deklarovat třídu a jak přistupovat k jejím proměnným a funkcím.
Pokud jste už programovali v C,
asi znáte struktury.
Struktury rozhodně usnadňují práci s větším množstvím
dat. Řekněme, že máte vytvořit program s databází
zaměstnanců nějakého podniku. Při použití samostatných
proměnných stvoříte např. dvě dvojrozměrná textová pole
pro jméno a příjmení, další pole čísel pro věk, plat
apod. Jestliže prvním prvkem v poli příjmení bude
"Novák", musí být jeho plat zase v prvním prvku
pole platy. A pokud potřebujete setřídit zaměstnance podle příjmení, musíte
vždy při změně polohy příjmení změnit i všechny ostatní
položky, jinak budete mít za chvíli Nováka na první pozici
pole příjmení, ale jeho plat na 15. Pozici v poli platy. A
zkuste se v tom pak vyznat.
Struktura vám pomůže sdružit související data pod jeden název, do jednoho objektu. Tak můžete vytvořit strukturu Zamestnanec, která bude obsahovat textové řetězce jmeno a prijmeni, a číselné proměnné plat,vek apod. Pak uděláte pole těchto struktur-pro každého zaměstnance jednu a můžete pohodlně třídit. Má to ale ještě jednu chybičku -abyste mohli strukturu využívat, musíte vědět jak přesně jsou data ve struktuře uložena - že napr. Příjmení je uloženo v textovém řetězci prijm, nebo že plat je ulozen v proměnné plat typu double a tak dále. Nebylo by hezké, kdyby struktura kromě toho že udržuje svá data s nimi dokázala také pracovat? K tomu potřebujeme jen přidat do ní funkce…
V jazyce C++ může mít i struktura členské funkce, ale přesto se používají většinou třídy. Proč? Struktury nemohou dědit -nemohou být odvozeny od jiných struktur. Proč tedy používat strukturu, když můžu použít třídu.
![]()
Následovat bude popis tvorby třídy Retezec pro práci s textovými řetězci. Na konci by měla umožnovat práci s řetězci jaká je obvyklá v jiných programovacích jazycích, tj. např používání operátorů pro řetězce atd. Každý krok při jeho vývoji se pokusím podrobně popsat. Ale než začneme, tady jsou některé základní informace:
Deklarace třídy: - Začíná
klíčovým slovem class. Následuje název třídy (zde MojeTrida)
a pak deklarace členských proměnných a členských funkcí uzavřená v těchto
závorkach {}. Nezapomeňte na středník.
Členská funkce a proměnná = promenná nebo funkce patřící
dané třídě. Říká se pak např. "vek je public
členská proměnná třídy MojeTrida".
class MojeTrida
{
public:
int vek; //první proměnná mojí třídy
double plat; //a další proměnná
//členské funkce
void PrintData(); //no a tohle je členská funkce
protected:
char jmeno[50]; //a ještě jedna proměnná
};
Vidíte, že deklarace třídy se
prakticky neliší od deklarace struktury. Navíc jsou tu jen ta
slova public: a protected.
Jsou to tzv. specifikátory
přístupu. Určují jak lze přistupovat k datům a funkcím
třídy.
public: - k těmto datům a funkcím má přístup každý.
protected: - tato data a funkce jsou přístupná pouze v této
třídě a ve třídách od ní odvozených.
private: - jsou dostupné jen v této třídě. Dokonce ani
potomci k nim nemají přístup.
Pokud z toho nejste chytří, neztrácejte hlavu, ještě se k tomu dostaneme a
po stém opakování to možná někteří pochopí.
Poznámka: Toto je pouze deklarace třídy. Není při ní
alokována žádná paměť, pouze dáváte překladači na
vědomí, že budete používat třídu s touto strukturou.
Skutečné vytvoření
objektu třídy MojeTrida a přidělení paměti se provede až
deklarací nějaké proměnné typu MojeTrida, a to takto:
MojeTrida tridka; //tridka je uz skutečný objekt který má přidělenu paměť
Přístup k proměnným a funkcím je stejný jako u struktur, tedy:
tridka.vek = 35; //uloží do
členské proměnné vek hodnotu 35
tridka.PrintData(); //zavolá členskou funkci PrintData, která
asi vytiskne něco na obrazovku
Pokud pracujete s ukazatelem (pointerem) na daný objekt používáte -> stejně jako u struktur. Pozor, nezapomeňte ukazatel inicializovat:
MojeTrida *pTridka; //pTridka
je ukazatel na objekt třídy MojeTrida
pTridka = &tridka; //inicializace ukazatele-teď ukazuje na
náš objekt jménem tridka
pTridka->PrintData() //volání členské fce
pTridka->vek = 35; //nastavení členské proměnné