У меня есть класс интерфейса — IAnimal и 2 производных класса — Tcat и Tdog. Я хочу, чтобы и Tcat, и Tdog наследовали функцию Eat, однако я хочу, чтобы Tcat мог иметь 2 параметра, а Tdog — параметры, которые он наследует. Это возможно?
/// 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);
};
TCat
не будет компилироваться, потому что контракт здесь заключается в том, что вы должны реализоватьbool Eat(int)
, во-вторых, если вы определяете новую функцию, которая не соответствует сигнатуре чистой виртуальной функции базового класса, то это не переопределение, а перегрузка. - person EdChum   schedule 10.01.2017using
это скрытие, а не перегрузка. - person Quentin   schedule 10.01.2017override
для любых переопределяющих функций. Он сообщит вам, если вы ошиблись в подписи. - person Paul Rooney   schedule 10.01.2017