Formát odevzdání programu/projektu jehož části se tvořily průběžně na cvičeních:

Rozdělte třídu pro dynamické dvourozměrné pole na dvě části. První část bude obsahovat obecné vlastnosti pro 2D pole (změna rozměrů …) a bude realizována jako template.
Druhá část zdědí z 2D pole a bude reprezentovat maticové výpočty. To znamená, že přidá matematické operace, zatímco změny rozměrů … budou volány z bázové třídy.
Možné chyby (špatný rozměr, alokace) ošetřete pomocí výjimek, které odchytíte v main a vytisknete, že chyba nastala a o jakou se jedná.
Názvy tříd volte Pole (+datový typ pro template) a Matice (template pouze interně pro pole 2d), kterým bude předcházet Váš monogram.
Každá třída bude mít vlastní h a cpp soubor. Main bude mít vlastní cpp soubor.
Kde to jde používejte přednostně reference a const.
Pracujte s knihovnou check (kontrola práce se soubory a pamětí).

Třídy budou obsahovat:
1) statické prvky pro počítání aktivních a celkově vzniklých prvků
2) statické metody pro získání aktuálního počtu aktivních a celkově vzniklých prvků
3) Pole 2D bude mít privátní metody pro alokování a odalokování pole.
4) Veřejné metody pro změnu rozměrů, transpozici.
5) Konstruktory: implicitní, kopírovací, konverzní, konverzní z řetězce. Destruktor.
6) Budou mít metody pro získání a nastavení prvku (gettery a settery).
7) Budou mít operátor přiřazení.
8) Matice bude mít operátor násobení a dále jeden pro porovnání, jeden unární, jeden realizovaný pomocí friend, jeden konverzní.
9) Metody pro (konzolové) načítání a tisk (pomocí streamů)
10) Napište virtuální metodu PrintName, která vytiskne jméno třídy.
11) Pomocí doxygen vytvořte dokumentaci, která bude obsahovat na úvodní straně hlavičku (jméno, název, …) a zadání. Dále stručně okomentujte soubory, třídy, členské proměnné a metody (včetně jejich parametrů a návratových hodnot).



Main bude obsahovat:
1) Tisk, že na začátku nejsou žádné aktivní ani vzniklé prvky.
2) Ukázky volání všech metod pro objekt a pro ukazatel na objekt.
3) Ukázku uložení a čtení z/do souboru pomocí operátorů se streamy.
4) Napište kód programu (pro různé typy objektů a ukazatelů), ve kterém ukážete, že se virtuální metoda PrintName chová podle předpokladů.
5) Tisk, že na konci nejsou žádné aktivní prvky a kolik bylo vzniklých