【发布时间】:2011-11-07 07:11:41
【问题描述】:
我正在尝试做这样的事情:
class foo {
virtual void bool operator==(foo const & rhs) = 0;
};
class bar1 : public foo {
bool operator==(bar1 const & rhs) { ... }
};
class bar2 : public foo {
bool operator==(bar2 const & rhs) { ... }
};
也就是说,我要指出,所有实现foo接口的类都必须为自己的派生类实现operator==方法。
但是,编译器抱怨 bar1 和 bar2 仍然是抽象类,因为它们还没有实现 operator==(foo const &)。
我考虑过在 bar1 和 bar2 中将函数签名更改为 foo const &,然后在函数内部执行 dynamic_cast,但这似乎很混乱:
class bar1 : public foo {
bool operator==(foo const & rhs) {
const bar1 * casted_rhs = dynamic_cast<const bar1 *>(&rhs);
if (casted_rhs == NULL) {
// not a bar1
return false;
} else {
// go through rhs and this object and find out if they're equal
}
}
}
这感觉很乱。
必须有更好的方法来做到这一点。
【问题讨论】:
-
在代码中显示
operator=在文本operator==.. 你想要哪一个? -
感谢您发现我的错字。我的意思是
operator==。
标签: c++ inheritance