Héritage, redéfinition de méthodes et spécialisation. Comment résoudre ce cas?
Salut à tous,
Je continue dans mes interrogations et voudrais vous exposer le cas suivant.
Soit ce code:
Code:
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:
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:
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