Salut à tous,

Je continue dans mes interrogations et voudrais vous exposer le cas suivant.
Soit ce code:

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);
}
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".
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:

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;
}
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
 
void Prepare(Aliment * alim);
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.

Est ce que des templates pourraient aider ?

Merci