#include class unAnimal { protected: char* sonNom; public: unAnimal(char* n = "un animal") : sonNom(n) {}; protected: virtual char* son_cri() const = 0; public: virtual void s_exprimer() const { cout << sonNom << " : " << son_cri() << endl; }; }; class unMamifere : public unAnimal { public: unMamifere(char* n = "un mamifere") : unAnimal(n) {}; }; class unChat : public unMamifere { public: unChat(char* n = "un chat") : unMamifere(n) {}; protected: char* son_cri() const { return "Miaou"; }; }; class uneSouris : public unMamifere { public: uneSouris(char* n = "une souris") : unMamifere(n) {}; protected: char* son_cri() const { return "Couic"; }; }; class unOiseau : public unAnimal { public: unOiseau(char* n = "un oiseau") : unAnimal(n) {}; }; class unCanari : public unOiseau { public: unCanari(char* n = "un canari") : unOiseau(n) {}; public: char* son_cri() const { return "Cuicui"; }; };