Rebonjour !
Je poursuis mon travail en développant la classe 'polynome' classe 'template' basée sur la classe 'template' monome (voir discussion précédente).
L'objet 'monome' n'a en fait que deux données (qui sont maintenant 'private' grâce à vous...). Il est donc facile d'écrire des méthodes publiques d'accès en lecture écriture, mais ce n'est pas la solution que j'ai choisie.
Les méthodes privées ou publiques des polynomes doivent impérativement manipuler les monomes, il est donc souhaitable de leur donner un acces direct aux données protégées des monomes.
On fait cela habituellement en déclarant la classe polynome 'amie' de la classe 'monome'. Tout le monde sait faire cela avec des classes 'normales'.
Prédéclaration de la classe candidate à l'amitié, déclaration d'amitié dans la définition de la classe à manipuler.
J'ai essayé de transposer cela fort logiquement en utilisant des déclarations 'template' autant de fois que la logique de la chose y oblige, mais en vain...
Je n'ai pas trouvé la bonne syntaxe.
Je vous mets donc à nouveau à contribution s'il vous reste un peu de temps, sachant que j'ai déjà fureté sur le web mais que je n'ai pas trouvé la solution claire, simple et satisfaisante qui doit forcément exister.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 template <typename T> class monome { private: T coefficient; exposant_multiple exposant; public: // constructeurs monome(); monome(T,exposant_multiple&); virtual ~monome(); monome& operator* (monome& other); monome& operator= (monome& other); bool est_nul(); template <typename X> friend ostream& operator<< (ostream& os, monome<X>& M); };PS: la classe polynome n'est qu'à l'état d'ébauche, il est trop tôt pour y apporter des critiques de fond (d'ailleurs monome n'est pas finie non plus, il manque pour les deux le degré, la somme des polynomes, le produit des polynomes, les puissances, etc...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 template <typename T> class polynome { private: unsigned int nombre_de_termes; monome<T> * termes; public: //constructeurs polynome(int ); virtual ~polynome(); monome<T>& operator[](unsigned int); // teste si aucun monome nul dans la somme bool est_propre(); // enlève le monome de rang i void supprime(unsigned int ); // supprime le premier monome nul void enleve_premier_nul(); // supprime tous les monomes nuls void nettoie(); template <typename X> friend ostream& operator<< (ostream& os, polynome<X>& ); };
Partager