我有以下类层次结构:
class Base{
....
virtual bool equal(Base *);
}
class Derived1: public Base{
....
virtual bool equal(Base *);
}
class Derived2: public Derived1{
}
class Derived3: public Derived1{
}
class Derived4: public Base{
}
我应该如何编写Base :: equal(Base *)函数,以便比较Derived4和类似的类别?它们没有数据字段,因此请仅检查实际对象是否具有相同的派生类。
如何编写Derived1 :: equal(Base) - Derived2和Derived3类似,它们没有任何数据字段,应该通过Derived1中的数据字段进行比较并检查 对象来自同一派生类?
更新: 我想要这个,因为我不想为每个Derived类编写相同的函数,例如:
bool Derived::equal(Base *b){
Derived *d = dynamic_cast<Derived*>(b);
return d;
}
答案 0 :(得分:3)
可用于多态类型间比较的通用技术称为“double dipatch”(参见Double Dispatch)。它可以应用于你的特定问题,在这种情况下,你最终会得到一堆带有几乎空体的重载函数,只返回'false'或'true'。
当然,如果您只想比较动态类型而不是其他内容,您可以通过运行时类型信息(即使用'typeid')来完成。
答案 1 :(得分:2)