Procvičení neobjektových vlastností jazyka C++
Práce se složeným datovým typem - struct
1) Nadefinujte strukturu SPole, která bude obsahovat
proměnné:
- aData pro uložení dynamického pole (tj. pole s
proměnnou délkou) typu int.
- aCelkem pro uložení
naalokované délky,
- aDelka, ve které bude uložena hodnota
aktuálně využitých prvků (od počátku bez mezer).
2) Ve funkci main vytvořte proměnnou pp typu SPole. Inicializujte její prvky na "nulové" hodnoty.
Alokace paměti pomocí new, mechanizmus výjimek
3) Naalokujte v proměnné pp pole o délce 10 prvků. Alokaci
proveďte pomocí operátoru new.
Pro zjištění úspěšnosti
alokace využijte mechanizmus výjimek. (Pro ověření zkuste naalokovat
"větší" množství paměti - tak aby se objevila standardní
výjimka).
V případě, že při alokaci došlo k chybě (tj. v případě
výjimky) vypište chybové hlášení a program ukončete.
Chybové
hlášení vytiskněte pomocí mechanizmů c++ (proměnná cout, endl,
prostor std, knihovna iostream).
Odalokování paměti pomocí delete
4) Před koncem funkce main korektně ukončete "život"
vytvořených proměnných typu SPole (odalokujte paměť pomocí
operátoru delete, nebo delete[] (?).
Po odalokaci
"vynulujte" proměnné struktury (signalizující, že proměnná
nemá platná data). V tomto případě to není nutné, ale pokud by se v
budoucnu přidával kód je dobré vědět, že proměnná neobsahuje platná
data).
Práce se strukturou
5) Po inicializaci proměnné pp naplňte pvky v poli aData hodnotami indexů (tj. 0,1...9). Nastavte zbylé proměnné struktury tak, aby odpovídaly realitě. Funkci zavolejte a ověřte její činnost.
Struktura jako parametr při volání funkce
6) Alokaci pole (tj inicializaci proměnných struktury hodnotami) přesuňte do funkce AllocPole(SPole *uk,int delka).
Pokud funkce dostane v parametru délka nulu, nebo záporné číslo,
hodí výjimku typu int s hodnotou stejnou jako je v proměnné delka. V
main se výjimka odchytne a vypíše text “spatne zadana delka“
a uvede se požadovaná hodnota (získaná z mechanizmu výjimky).
Pokud
předaný parametr uk bude již ukazovat na platnou adresu, hodí se
výjimka s textem “nealokuji – pamet je jiz alokovana“.
Tato vyjimka se odchytí v main a vyslaný řetězec se
vytiskne.
Promyslete:
Stačí proměnnou pole předávat pomocí
ukazatele, když do ní chceme zapsat?
Nebo musíme předávat adresu
na které proměnná leží pomocí SPole**?
Vysvětlete, která
varianta je vhodná pro splnění zadání.
Popište rozdíly mezi
jednotlivými předáními.
Pole struktur
7) Ve funkci main vytvořte proměnnou fp , která bude ukazatelem na pole struktur SPole.
8) Napište funkci AllocPolePoli, která naalokuje pole struktur SPole o požadovaném počtu prvků, jednotlivé prvky inicializuje stejně jako ve funkci AllocPole.
9) Na konci funkce main odalokuje pole struktur (tj. odalokujte naalokovanou paměť uvnitř všech prvků a potom celé pole).
Reference
10) (Po probrání reference) napište funkci vykonávající stejnou činnost jako AllocPole(SPole*, int), ale pro předání proměnné struktury použijte reference AllocPole(SPole &, int). Nechte v programu obě funkce. Ověřte, že je to možné, a že obě fungují. Vysvětlete rozdíly.
DU – viz. sekce DU/projekt ve čtvrtém týdnu rozvrhu cvičení:
Na základě zadání 1 vytvořte program, který bude plnit požadované - jedná se o verzi v jazyce C.
Na základě zadání 2 přepište tento program tak aby využíval možností jazyka C++.
Oba programy (projekty) budou ve stejném řešení (solution) v prostředí Visual Studio.