例如,我有纯虚函数的基类:
class IBase
{
virtual void Function(const IBase& ref) = 0;
};
如果我继承该类,是否必须重载以派生类为参数的“函数”?
class Derived
{
// this will be implemented
virtual void Function(const IBase& ref) {}
// does this have to be implemented
virtual void Function(const Derived& ref) {}
};
或者编译器可以区分调用,我可以跳过编写重载函数?
Derived d();
...
IBase* dptr = &d; // ignoring cast for example
// would never really call 'Function' on itself, this is for example purposes
dptr->Function(d);
注意: IBase::Function 必须采用引用类型,而不是指针类型。
我了解继承纯虚函数的规则,而不是纯虚函数将基类型作为参数的这种特殊情况。
我需要知道的是我是否必须在将继承类型作为参数的每个继承类型中实现重载,或者编译器是否会理解如果我传递 Derived 引用来调用虚拟实现?