我有一个接口类 - 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);
};
答案 0 :(得分:2)
否。无法更改virtual
方法的签名。甚至没有默认参数
唯一的例外是covariance,其中返回类型可以不同。
使用C ++ 11,经验法则是在假定的override
方法之后放置virtual
说明符(纯粹或不纯)。如果它没有编译,那么出了点问题。在您的代码示例中,以下将无法编译:
bool Eat(int _i_food, int _i_amount) override; // error
答案 1 :(得分:0)
这是不可能的。它也没有意义,因为如果这些函数具有不同的签名,您将无法通过接口调用它们。如果通过接口传递一个参数并且实际实例需要两个参数会发生什么?
所能做的是覆盖你所拥有的那个,然后添加一个带有两个参数的附加方法。但是你无法通过界面调用新的。
答案 2 :(得分:0)
您需要提供所有纯虚函数的实现。您可以覆盖函数Eat(int _i_food)
,但是无法使用指向基类的指针调用重载版本。
答案 3 :(得分:0)