4.1. Descrierea func?iilor membre
4.1. Descrierea func?iilor membre
Refacem clasa fractie_rationala, ad?ug?nd c?teva posibilit??i noi. Ad?ug?m metode noi care ne vor da posibilitatea de a vizualiza valoarea obiectului sub forma m/n, de a edita (modifica) con?inutul c?mpurilor, de a ob?ine informa?ii despre acest con?inut. Metodele vor fi descrise ca func?ii membre ale clasei. Constructorul ?i func?ia eroare() r?m?n acelea?i ca ?i ?n varianta precedent?:
include #include class fractie_rationala { protected: unsigned int numarat; unsigned int numit; public: fractie_rationala(unsigned int, unsigned int); void print(); // func?ia pentru afi?area frac?iei void modif(unsigned int numarat_nou=0, unsigned int numit_nou=1); unsigned int numarator(); // ?ntoarce valoarea num?r?torului unsigned int numitor(); // ?ntoarce valoarea numitorului void reducere(); // reduce num?r?torul ?i numitorul private: void eroare(char* mesaj); }; fractie_rationala::fractie_rationala( unsigned int numarat_init=0, unsigned int numit_init=1) { … // codul precedent } void fractie_rationala::eroare(char* mesaj) { … // codul precedent } void fractie_rationala::print() { cout << numarat << '/' << numit; } void fractie_rationala::modif(unsigned numarat_nou, unsigned numit_nou) { if (numit_nou>0) { numarat=numarat_nou; numit=numit_nou; } else eroare("Numitorul este egal cu zero!"); } unsigned int fractie_rationala::numarator() { return numarat; } unsigned int fractie_rationala::numitor() { return numit; } void fractie_rationala::reducere() { if(numarat>0) { unsigned int a, b, dif; if (numarat<numit) { b=numarat; a=numit; } else { b=numit; a=numarat; } while (a%b) { dif=a-b; if (dif>b) a=dif; else { a=b; b=dif; } } numarat/=b; numit/=b; } else numit=1; } void main() { fractie_rationala fr(2, 5); // cre?m un obiect numit // fr reprezentantul clasei // fractie_rationala cout << "Fractia initiala "; // afi?area unui text fr.print(); // apel?m func?ia membr? print() pentru // obiectul fr cout << endl; // cursorul ?n linia urm?toare fr.modif(4, 8); // apel?m func?ia membr? modif() // pentru obiectul fr cout << "Dupa modificare "; fr.print(); cout << endl; fr.reducere(); // apel?m func?ia membr? reduce() // pentru a reduce obiectul fr cout << "Dupa reducere "; fr.print(); cout << endl; char c; cin >> c; } |
Dup? cum observ?m, au fost ad?ugate cinci func?ii noi: print(), modif(), numarator(), numitor() ?i reduce().
Rezultatul programului este u?or de ?n?eles:
Fractia initiala 2/5
Dupa modificare 4/8
Dupa reducere 1/2
Acum utilizatorul are acces deplin la p?r?ile componente ale obiectului de tipul fractie_rationala, ?ns? acest acces este asigurat prin intermediul func?iilor membre, ceea ce exclude operarea incorect? cu c?mpurile obiectului. De exemplu, numitorul nu poate lua valoarea zero. Se poate de mers ?i mai departe, excluz?nd cazurile c?nd num?r?torul este mai mare dec?t numitorul (depinde de necesit??ile aplica?iei).
?n exemplul precedent a fost ar?tat modul de declarare ?i definire a func?iilor, iar ?n func?ia main() a fost ar?tat modul de apelare a func?iilor membre.
O func?ie membr? poate fi declarat? ca func?ia generic?.
Exerci?iul 4.1. ?ncerca?i s? transforma?i exemplul precedent cu c?teva func?ii membre generice.
_________________________
Autorul: dr.conf. S. Pereteatcu
Оставить комментарий