Projekt - vzor zadání
V následujícím je vzor zadání. Červeně jsou označeny prvky, které se mohou lišit a které by platily pro třídu komplex. Čím více černých položek využijete, tím více vlastností si osvojíte a tím hodnotnější program bude. V tomto okamžiku nás nezajímá implementace, tedy jaká data se používají a jak uvnitř fungují metody, pouze u metod popíšeme jejich činnost slovně. Zelené komentáře v zadání nebudou, jsou pouze informativní. U některých tříd mohou nastat problémy s tím, že daný typ metody pro ně nemá nejlogičtější využití – zkuste si nějaké (byť méně logické) využití vymyslet (z hlediska programátorského je to samozřejmě špatně, protože metody by měly být logické a snadno chápatelné, ale my zde dáme prioritu procvičení daného typu metod). Každý z autorů by měl napsat alespoň jednu metodu daného typu.
Text zadání:
Navrhněte třídu komplex, která bude realizovat knihovnu pro práci s komplexními čísly. Tato knihovna bude realizovat činnost s komplexními čísly ve tvaru a situacích, které umožňují standardní typy (int, float …) a bude doplněna o další metody pro práci s proměnnými dané třídy. Navržená třída umožní:
vznik objektu – implicitní konstruktor, (konverzní) konstruktor z typu int, float, dále pak konstruktor z dvojice hodnot reprezentujících reálnou a imaginární složku, nebo dvojice hodnot reprezentujících velikost a směr, dále bude možné konstruovat na základě řetězce ve tvaru „a + bi“ a (a,b). Kopykonstruktor. (Pozn. Celkem tedy – implicitní, kopykonstruktor, konverzní (jeden z řetězce), s více parametry – minimálně 5ks)
Počet vzniklých a aktuálních prvků bude sledován za pomoci statických proměnných třídy a bude možné ho vytisknout pomocí statické metody.
Zánik objektu - destruktor bude implementován s mechanizmem odpočtu aktivních prvků přes statické proměnné.
Budou implementovány operátory s příslušnými činnostmi - operátor = pro přiřazení, operátor – jako unární operátor pro inverzi hodnoty reálné i imaginární a operátor – jako binární operátor pro rozdíl, operátor … , operátor += realizující a = a+b;, logické operátory ==, !=, <=, > pro srovnání komplexních čísel (na základě jejich modulu). Dále Konverzní operátor na int, který bude převádět komplex na jeho velikost v celých číslech. Nečlenský operátor, využívající friend vlasností realizující součet float čísla a komplexního čísla. (Pozn. Celkem tedy – rovná se, unární (nejlépe 3ks) , binární (nejlépe 3ks), konverzní, nečlenský, logické (nejlépe 3ks) – minimálně 12ks. Operace se budou provádě s uloženými hodnotami v uzlech, výsledkem bude sjednocení uzlů - například)
vstup a výstup pomocí streamů (realizovaný friend funkcí s využitím jejích vlastností) – přetížením operátorů << a >> ve formě jedné z navržených řetězcových variant (viz. Konstruktor).
Budou realizovány privátní a veřejné metody: veřejná metoda Amp pro zjištění amplitudy (velikosti fázoru) která nebude mít parametry … , dále … pro …, privátní metoda Compare, která srovná dva prvky typu komplex a nastaví tři bity – je menší, rovno, je větší – tuto metodu budou používat logické operátory (Pozn. Celkem tedy – minimálně 2ks privátní a 3ks veřejné. Pro privátní metody jsou nejvýhodnější funkce typu „uprav“, „přepočítej“)
budou realizovány metody, pro výpočet
komplexně združeného čísla:
a) umožňující volání
bbb=aaa.Metoda( ), která mění prvek aaa
na komplexně združený
b) umožňující volání
bbb=Metoda(aaa), která nechává prvek aaa nezměněn
a vrací (temp objekt) komplexně
združené číslo. (Pro toto je
nejvýhodnější funkce typu „změň“, „invertuj“
...)
použití dynamických dat ve třídě – nepředpokládám.
Dědění ve třídě – nepředpokládám.
Ve vlastním projektu se předpokládá i implementace metod vytvářených implicitně.
Vlastní realizace třídy bude rozdělena na hlavičkový a zdrojový soubor. Další zdrojový soubor bude reprezentovat program demonstrující vlastnosti a použití definované třídy, který bude realizován jako konzolová aplikace přeložitelná ve Visual C++ (prázdný projekt, maximální přísnost na tvorbu chybových hlášení). Soubory budou obsahovat úvodní poznámku o svém názvu, řešitelích ...
Tento demonstrační program bude napsán tak, aby při demonstraci činnosti nevyžadoval zásahy obsluhy. Může být realizován tak, aby „načítal“ konstanty a ty přiřazoval, nebo aby načetl data (minimální množství (dvě, tři proměnné) ) z klávesnice, nebo ze souboru (v případě přítomnosti jména souboru na řádce volání programu). Načtenými daty bude inicializovat proměnné a na jejich základě bude demonstrovat činnost třídy a dále ukládat výsledky do souboru (opět zadán jako parametr volání programu z příkazové řádky). Vzorový vstupní soubor pro načítání ze souboru, nebo přesměrování z klávesnice bude přiložen.
K zasílanému zadání nezapomeňte připsat hlavičku (jména řešitelů, název projektu, datum zadání … budou součástí odevzdávaného souboru)
Pro lepší orientaci uvádíme krátkou motivaci k pojmu třída.
Poslední změna: 2007-09-18