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

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов