【发布时间】:2012-04-02 03:31:04
【问题描述】:
考虑一个类,它应该为其所有子类提供一些(多态)方法,例如算术或位运算符。这些操作不应被派生类修改以确保正确执行。但是,与此同时,我希望单独定义子类的评估(在我的示例中使用函数 isError()):
class Mom
{
public:
virtual bool operator && (const Mom&) const final
{
return this->isError() && p_rOther.isError();
}
private:
virtual bool isError() = 0;
};
鉴于当前的标准,这似乎是不允许的,因为“纯虚拟性”意味着子类必须实现基类的所有虚拟功能,而“final”关键字与此范式相矛盾。
对如何处理这种矛盾有什么建议或想法吗?
【问题讨论】:
-
对不起,我不知道你在说什么。
-
纯虚函数必须被覆盖——这并不意味着任何其他虚函数都必须被覆盖。
-
@gilgamash:“我需要覆盖所有的虚拟方法”——不,只有纯的。
-
这并不矛盾。派生类必须实现所有纯虚函数,但它们不必重新实现其他虚函数(除非他们愿意)。
-
永远不要创建自己的
operator&&,因为它会改变运算符的语义(创建自己的运算符后它不再短路)。
标签: c++ c++11 overriding final pure-virtual