XX. Diel C++ - Triedy I.

Michal Kyžňanský  /  17. 02. 2006, 00:00

Začíname novú kapitolu programovania v C++. Triedy sú hlavnou súčasťou objektovo-orientovaného programovania. Je to hlavné rozšírenie jazyka C++ oproti C. Triedy umožňujú znovu používať kód, dediť vlastnosti a iné veľmi špecifické procedúry.

Trieda a objekt, - to sú hlavné zložky objektovo orientovaného programovania v C++. Tieto dva pojmy budeme používať pri objasňovaní princípov objektovo orientovaného programovania. Trieda je dátový typ, ktorý je možno vysvetliť/predstaviť si ako premennú, ktorá obsahuje rôzne zložky a je to akési makro určitých objektov. Trieda obsahuje nejaké svoje dáta – premenné a nejaké svoje metódy. Deklarovanie triedy môžeme zapísať pod tri rôzne časti: Public: – príkazy a deklarácie pod týmto príkazom búdu verejné a dostupné v ostatných triedach, Protected: - deklarácie pod týmto zápisom budú dostupné pre našu triedu a pre jej potomkov ale inde nie, Private: – pod touto deklaráciou budú príkazy, funkcie a premenné, ktoré nemôžeme používať mimo triedy. Základné typy deklarácie triedy sú:

//pomocou deklarácie typedef typedef class {
public:
...................................
...................................
...................................
private:
...................................
..................................
}nazov_triedy;

//priamo

class nazov_triedy {
public:
...................................
...................................
...................................
private:
...................................
..................................
};


Príklad na deklaráciu, ktorá obsahuje premenné a metódy:
class pocitac { 
public:
char procesor[20], ma_doska[20], graf_karta[20];
int RAM, CPU_freq;

void test(int vstup);
int vypocet(void);
};


Ak by sme chceli pracovať s dátami, ktoré obsahuje trieda pocitac, tak je to pokojne možné v rámci celého programu, pretože je definovaná ako public. Ukážeme si však použitie konštruktoru a deštruktoru v triedach a deklaráciu statických a dynamických premenných typu trieda, čo je dôležitým aspektom pre pochopenie ďalšej práce s OOP.

Statické

Statická deklarácia reprezentuje zápis napr. pocitac pc; tento spôsob deklarácie hovorí, že pamäť pre vytvorený premennú/objekt bude dostupná okamžite po deklarácii a bude uvoľnená až po skončení programu. Pri použití statickej deklarácie sa pristupuje k prvkom triedy nasledovne:
pocitac.RAM = 1024;	//prístup pomocou operátora .


Dynamické

Je deklarovanie pomocou dynamicky alokovanej pamäte. Deklarácia pocitac *pc; vytvorí pointer-ukazovateľ, ktorý nebude obsahovať priamo dáta premennej, alebo prvku triedy, ale iba adresu v pamäti. Miesto pre premennú je nutné manuálne alokovať pomocou konštruktoru - operátoru new (alebo vlastne naprogramovaným konštruktorom). Dynamicky alokované premenné je tiež nutné aj manuálne zrušiť po skončení práce s ňou pomocou deštruktoru - operátoru delete. Pri dynamickej deklarácii sa pristupuje k prvkom triedy nasledovne:
pocitac->RAM = 1024; //prístup pomocou pointerov


Konštruktor

Konštruktor a deštruktor majú tiež svoje špecifiká, dajú sa prispôsobiť tomu čo potrebujeme. Konštruktor je v programovacom jazyku C++ špeciálna metóda, ktorá alokuje miesto v pamäti pre dynamické premenné. Nevracia žiadny parameter. Ide hlavne o konštruktor, ktorý sa delí na implicitný a explicitný.

Implicitný konštruktor tiež nazývaný default konštruktor je generovaný automaticky C++ Builderom, keď použijeme konštruktor new. Jeho úlohou je automaticky alokovať premennú bez zásahu do jej parametrov alebo súčastí bez nutnosti programovania.

Explicitný konštruktor je iný v tom, že máme voľné ruky, pretože jeho hlavnou úlohou je možnosť alokovať premennú a zároveň do nej zapísať hodnotu/hodnoty. Používa sa práve pri spomínaných prípadoch, keď potrebujeme vopred určiť parametre premenných. Hlavná úloha explicitného konštruktora je teda volať konštruktor s parametrami. Ukážeme si príklad:
//deklaráciu našej triedy pocitac nahradí nová 

class pocitac
{
public:
char procesor[20],
ma_doska[20],
graf_karta[20];

int RAM, CPU_freq;

pocitac(
char pprocesor[20],
char mma_doska[20],
char ggraf_karta[20]);

void test(int vstup);
int vypocet(void);
};

//programovanie konštruktoru – jeho tela,
//tým že konštruktor naprogramujeme vlastnoručne
//nemusíme napr. alokovať všetky časti triedy, to je
//jednou z výhod explicitného konštruktoru

pocitac::pocitac(char pprocesor[20],char mma_doska[20],
char ggraf_karta[20]){

strcpy(procesor,pprocesor);
strcpy(ma_doska,mma_doska);
strcpy(graf_karta,ggraf_karta);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{

pocitac *moj;
moj = new pocitac("Athlon","Asus","Nvidia");
//volanie konštruktora s parametrami
ShowMessage(moj->procesor);
}


Nabudúce budeme pokračovať v kapitole triedy a preskúmame dedičnosť.

Súvisiace články:

Prehľad všetkých dielov

Neprehliadnite: