Práce s ukazateli – dvourozměrné pole – úpravy 2
Procvičování práce s pamětí a vícerozměrnými proměnnými. Úpravy na C++ mechanizmy.
Zadání
Dokončete a odlaďte úkoly z minulých cvičení.
Upravte program pro práci s dvourozměrným polem z minulého cvičení pomocí C++ mechanizmů:
V názvech proměnných se nyní vyskytuje duplicitní označení matrix Matrix::Allocate_matrix – zjednodušte názvy funkcí tím, že slovo matrix z jejich názvu odeberete (název jmenného seznamu zůstává).
Převeďte předávání parametrů do a z funkcí na předávání pomocí reference (tam kde to jde a dává to smysl). Předávání pomocí reference je výhodné tam, kde předáváme větší proměnné (složené proměnné struct, class takřka vždy, pokud z předávání pomocí hodnoty neplynou nějaké výhody). Dále je reference výhodná tam, kdy chceme proměnnou ve funkci změnit tak, aby se změna projevila i mimo funkci.
Projděte prototypy funkcí a definice jejich parametrů. Parametry, které se v dané části programu (funkci) nemění, označte jako const. Změnu je nutné provést ve zdrojovém (u deifnice funkce) i hlavičkovém souboru (u deklarace funkce).
Vytvořte funkce pro zadávání a čtení hodnoty z pole –
tzv. gettery a settery. Tyto funkce budou mezičlánkem mezi „běžným“
uživatelem a 2D polem, který bude mít za úkol kontrolovat přístup do
pole. Tyto funkce budou mít jako parametr strukturu 2D pole a pozici
prvku, se kterým se má pracovat. Funkce provede kontrolu, zda pozice
je uvnitř pole – pokud není, zahlásí chybu pomocí výjimky.
Pokud je prvek uvnitř pole možné vrátit referencí, můžeme jako
getter a setter použít jedinou funkci. Výhodou této koncepce je
jednoduchost a to, že se předávají reference (úsporné předávání
parametrů). Nevýhodou je to, že nyní nedošlo k úplnému oddělení dat,
protože přes referenci je možné zjistit adresy prvků pole a následně
ho „napadnout“.
K úplnému oddělení dat by došlo,
kdyby byly funkce dvě a getter vracel hodnotu (nebo alespoň
referenci na konstantní proměnnou).
Poslední změna 2014-10-20