Alors,
Cette ligne d�clare une variable membre de type result_value, dont le nom est value.
1 2
| typedef typename result_type::iterator iter; //ligne 5
typedef typename result_type::const_iterator cst_iter; //ligne 6 |
Ces deux lignes d�clarent des iterateurs. Ce sont des objets qui permettent de parcourir les objets stock�s dans cet objet. Ici, ce sera sans doute pour parcourir value. Celui de la ligne 6 est un iterateur constant, c'est � dire que si on l'utilise, on ne pourra pas modifier l'objet sur lequel il pointe.
processus(int size = 0) : value(size) {}; //ligne 7
�a c'est un constructeur. Il d�finit � la fois un constructeur par d�faut (si aucun param�tre ne lui est fourni, size sera 0) et un constructeur qui prend un param�tre: size.
virtual result_type operator()() = 0;
�a c'est l'op�rateur d'appel de fonction. En g�n�ral, il sert pour permettre l'utilisation de cet objet en tant que foncteur. Parfois, c'est juste pour simplifier son utilisation.
Ici, cet op�rateur est virtuel pur, ce qui signifie (entre autres) que:
1. cette classe ne peut pas �tre instanci�e. En java, on dirait que c'est une interface.
2. les classes qui h�ritent de celle-ci devront obligatoirement impl�menter cette fonction. C'est la raison pour laquelle on parle souvent de "programmation par contrat" lorsqu'on utilise des fonctions virutelles pures: on signe un contrat avec les classes qui vont h�riter, contrat qui consiste en l'impl�mentation de ces fonctiones virtuelles pures.
result_type current() const { return value; }; //ligne 9
�a c'est un simple accesseur. Il est d�clar� constant car, et c'est logique, il n'est pas sens� modifier l'instance qui l'appelle. Attention cependant, cet accesseur renvoie une copie de l'objet value.
1 2 3 4 5 6 7
| template <typename S> //ligne 10
friend std::ostream& operator<<(std::ostream &o, //ligne 11
const processus<S> &p) //ligne 12
{
o << 0;
return o;
} |
�a c'est l'op�rateur d'indirection de flux. C'est le m�me op�rateur qui est utilis� dans le code suivant par exemple:
std::cout << "hello word" << std::endl;
Par contre, l'impl�mentation de cet op�rateur est �trange (le corps de la fonction), je ne la comprend pas.
Partager