【发布时间】:2021-10-16 14:08:35
【问题描述】:
我有这段代码:
class ISerializable
{
public:
virtual bool operator==(const ISerializable* /*value*/) const { return false;};
virtual bool operator!=(const ISerializable* /*value*/) const { return true;};
};
class Point2I : public ISerializable
{
public:
bool operator==(const Point2I& value)
{
return (x == value.x && y == value.y);
}
bool operator!=(const Point2I& value)
{
return !(*this == value);
}
public:
int x;
int y;
};
class Coordinate : public ISerializable
{
public:
virtual bool operator==(const Coordinate& value) const;
virtual bool operator!=(const Coordinate& value) const;
};
这导致我在 gcc 编译器上出现 -Woverloaded-virtual 警告。
我理解这个警告,因为 Point2I 中的函数声明对 ISerializable 隐藏了虚函数。 但我不确定在 Point2I 中缺少 const 是否会导致此警告。
能否请您帮助我了解导致此警告的原因是 const 还是其他原因?来自 gcc 的警告描述没有具体提及任何内容。
更新:
我在我的代码库中发现了另一个类 Coordinate,它已经覆盖了这个并且 gcc 没有为此抛出警告。 Point2I 和 Coordinate 的唯一区别是我没有在 Point2I 中用 const 声明它虚拟。似乎只是 const 隐藏了基类声明。
【问题讨论】:
-
总是使用
override关键字,它会产生编译错误而不是警告。 -
关于更新后的问题:您得到的任何答案都没有解释发生了什么吗?
const或没有const- 您会收到有关重载virtual方法而不是覆盖它的警告。我认为这两个答案都解释了这一点,我想我也解释了你实际上如何可以overridevirtual方法。
标签: c++ class operator-overloading declaration gcc-warning