Bonjour,
J'aimerai réaliser ce code :
Animal est la classe mère, Chat une classe fille avec un paramètre en plus, et Humain avec aucun paramètre en plus.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
25
26
27
28
29
30
31
32
33 class Animal { public: Animal(string name) : m_name(name) {}; ~Animal(){}; string getName() const {return m_name;}; virtual int getLengthQueue() const = 0; protected: string m_name; }; class Chat : public Animal { // Constructeurs, destructeurs... public: int getLengthQueue() const {return m_lengthQueue;}; protected: int m_lengthQueue; }; class Humain: public Animal { // Constructeurs, destructeurs... public: int getLengthQueue() const {return 0;}; // PROBLEME };
J'ai décidé que j'aurai besoin de mettre le getter de la longueur de la queue en virtuel pur, parce que dans le code je ne connais pas précisément à quel type j'ai affaire (si c'est un Chat ou un Humain), dans une fonction quelconque.
Par exemple :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 int computeLengthQueueAnimal(Animal &ani) { return (ani->getLengthQueue()); } int main() { Chat c("tony", 5); // on imagine le constructeur avec son nom et la longueur de la queue cout << computeLengthQueueAnimal(c) << endl; Humain h("Jean") cout << computeLengthQueueAnimal(h) << endl; }
Le problème c'est que si je peux définir ce getter pour le Chat, c'est difficilement le cas pour l'Humain, vu qu'il n'a pas de paramètre "m_lengthQueue", mais je suis quand même obligé, alors je met un "return 0".
Je trouve pas ça très propre. Du coup, est ce que j'ai vraiment pas le choix et je dois changer de design ? Mais si oui lequel vous me proposez ? Ou bien on doit laisser ça là comme ça...?