Salut à tous,
Je continue dans mes interrogations et voudrais vous exposer le cas suivant.
Soit ce code:
Au delà des problèmes de conception. On voit ici que les Cuistots ont pas mal en commun. Disons que l'on veuille leur créer une classe de base "Cuistot".
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
23
24 class Aliment { /* class abstraite */ } class Viande : public Aliment { /* ... */ } class Legume : public Aliment { /* ... */ } CuistotViande { string nom; // getter et setter inclus string specialite; // getter et setter inclus void Prepare(Viande * piece); } CuistotLegume { string nom; // getter et setter inclus string specialite; // getter et setter inclus void Prepare(Legume * leg); }
Comment s'y prendre?
Bien entendu les variables communes ne posent pas de soucis, mais la méthode Prepare ... Si on considère la définition suivante:
On ne peut pas compiler le code parce que les classes CuistotViande et CuistotLegume héritant de Cuistot n'implémentent pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Cuistot { string nom; // getter et setter inclus string specialite; // getter et setter inclus void Prepare(Aliment * alim) = 0; }
Alors comment décrire, pour une évolution future, disons de gestion des Cuistots, qu'un Cuistot possède forcément un nom et une spécialité et que celui ci peut préparer un aliment? En même temps, il faudrait être sur qu'on ne demande pas à un CuistotViande de préparer un navet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void Prepare(Aliment * alim);
Est ce que des templates pourraient aider ?
Merci
Partager