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é

 

V prvním kroku deklarujeme třídu Retezec

[Obsah]