No tak v prvom rade, konštruktor máš na to, aby si si v ňom objekt inicializoval a ty ho veselo preskakuješ. To môže byť tvoj problém s tými "hatlaninami"
V druhom rade, máš vytvoriť "operátorové funkcie", čo mi skôr príde ako "preťažte operátory pre +,-,*,/".
Takisto písať pre operácie vlastnú triedu je maximálna hlúposť. Nejako si ešte nestihol pobrať zmysel OOP. Takto nejako by si mal túto úlohu riešiť:
1.) Vytvorím si triedu RomaNumer, kde do konštruktora pošlem string - rímske číslo - a prevediem si ho na arabské. To si uložím do členskej premennej typu int.
Taktiež vytvorím bezparametrický konštruktor, kde hodnotu inicializujem na nulu.
2.) Preťažím operátory pre klasický súčet, rozdiel atď. To bude jednoduché, keďže pracujem s klasickým intom.
3.) Rovnako preťažím operátory porovnávania. To bude rovnako jednoduché.
4.) Vytvorím metódu Print(), ktorá mi arabské číslo prevedie späť na string a vypíše ho.
Celé použitie triedy by potom vyzeralo takto:
Kód:
RomaNumer num1 ( "XXXI" ); // vo vnutri je to 31
RomaNumer num2 ( "CCXI" ); // vo vnutri je to 211
RomaNumer num3; // vo vnutri je to 0
num3 = num1 + num2;
num1 = num 3 / num 2;
num1.Print();
/* pripadne mozem pretazit aj operator << a budem to pouzivat ako
cout << num1;
*/
if ( num3 > num1 )
do_something...
Ako vidíš, jedna trieda zaobstará všetko. Žiadne getre, žiadne setre a už vôbec nie žiadna friend trieda pre operácie. NIE! To už nikdy nerob
