无需更改功能签名.请看以下内容:
class BaseItem
{public:
virtual std::string getDifferences(const BaseItem& item) = 0;
};
class DerivedClass : public BaseItem
{public:
virtual std::string getDifferences(const BaseItem& item) // keep it as it's
{
const DerivedClass& derivedItem = static_cast(item);
}
};
可以使用static_cast<>没有任何恐惧,因为DerivedClass :: getDifferences()仅为DerivedClass对象调用.为了显示,
BaseItem *p = new DerivedClass;
DerivedClass obj;
p->getDifferences(obj); // this always invoke DerivedClass::getDifferences
如果您担心有时您可能最终将任何其他派生类对象作为方法的参数传递,那么请使用dynamic_cast<>相反,如果该转换失败则抛出异常.