4.2. Func?iile membre inline

4.2. Func?iile membre inline

?n versiunea actual? a clasei fractie_rationala au fost incluse c?teva func?ii membre noi. ?n majoritate ele sunt at?t de mici, ?nc?t ar fi de dorit ca ele s? fie dezvoltate inline.

Pentru a face ca o func?ie membr? s? devin? inline, este de ajuns de a prefixa antetul ei cu cuv?ntul rezervat inline ?ntr-un singur loc (fie la declararea func?iei ?n clas?, fie la definirea func?iei). Adic?:

class fractie_rationala
{inline unsigned int numarator(){return numarat;}
   …
 
};
sau a?a:
inline unsigned int fractie_rationala::numarator()
{
   return numarat;
}


Se poate indica cuv?ntul inline ?i ?n ambele locuri. El poate fi scris ?n orice pozi?ie ?nainte de numele func?iei (inline unsigned int, sau unsigned inline int, sau unsigned int inline, nu conteaz?).

Dezvoltarea inline pentru majoritatea func?iilor membre este practica uzual? ?n C++. De aceea, pentru descrierea func?iilor membre inline a fost introdus? forma special?, c?nd definirea func?iei membre se face ?n declararea clasei. ?n acest caz cuv?ntul rezervat inline poate fi omis.

Lu?nd ?n considera?ie cele expuse, modific?m ?nc? o dat? clasa fractie_rationala, utiliz?nd func?iile membre inline:

#include <stdlib.h>
#include <stdiostr.h>
 
class fractie_rationala
{
   protected:
      unsigned int numarat;
      unsigned int numit;
 
   public:
      fractie_rationala(unsigned int numarat_init=0,
                        unsigned int numit_init=1)
      {
         modif(numarat_init, numit_init);
      }
 
      void print(){cout << numarat << '/'
                        << numit;}
 
      void modif(unsigned int numarat_nou=0,
                 unsigned int numit_nou=1)
      {
         if (numit_nou>0)
         {
            numarat=numarat_nou;
            numit=numit_nou;
         }
         else
            eroare("Numitorul este egal cu zero!");
      }
 
      unsigned int numarator(){return numarat;}
      unsigned int numitor(){return numit;}
      void reducere();
 
   private:
      void eroare(char* mesaj)
      {
         cerr << mesaj;
         exit(1);
      }
};
 
void fractie_rationala::reducere()
{// codul precedent
}


?n acest exemplu toate func?iile membre, ?n afar? de func?ia reducere(), au fost transformate ?n inline. Constructorul la fel a fost transformat ?n inline; totodat?, el a fost simplificat prin apelul func?iei membre modif(). Func?ia reducere() fiind voluminoas? nu a fost transformat? ?n inline. Dac? ad?ug?m la exemplul dat func?ia main() din programul precedent, vom vedea c? rezultatul afi?at de acest program modificat va fi exact acela?i.
_________________________
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 сайтов