J'ai une classe d'interface - IAnimal et 2 classes dérivées - Tcat et Tdog. Je veux que Tcat et Tdog héritent de la fonction Eat, cependant, je veux que Tcat puisse avoir 2 paramètres et que Tdog ait les paramètres hérités. Est-ce possible?Peut-on remplacer les fonctions virtuelles pures de la classe héritée?
/// Pure virtual - to ensure all inherited animals have eat and sleep
class IAnimal
{
public:
virtual ~IAnimal() {}
virtual bool Eat(int _i_food) = 0;
virtual bool Sleep(int _i_time) = 0;
};
class TCat : public IAnimal
{
public:
bool Eat(int _i_food, int _i_amount); // can we override interface pure virtual from inherited class?
bool Sleep(int _i_time);
};
class TDog : public IAnimal
{
public:
bool Eat(int _i_food);
bool Sleep(int _i_time);
};
D'abord 'TCat' ne compilera pas parce que le contrat est ici que vous devez mettre en œuvre' bool Eat (int) ', d'autre part si vous définissez une nouvelle fonction qui ne correspond pas à la signature pure de la fonction virtuelle de la classe de base, alors cela ne surcharge pas mais surcharge – EdChum
Google le principe de substitution de Liskov. Ensuite, examinez votre code et voyez pourquoi ce que vous faites ne parvient pas à le respecter. – StoryTeller
@EdChum sans déclaration explicite de 'using ', c'est cacher, pas surcharger. – Quentin