【发布时间】:2020-04-01 07:55:48
【问题描述】:
我试图覆盖 Vector_container 中的 size 函数,但 IDE 告诉我“标记为‘覆盖’的非虚拟成员函数隐藏了虚拟成员函数”
class Container {
public:
virtual double& operator[](int) = 0; // pure virtual function
virtual int size() const = 0; // const member function (§4.2.1)
virtual ~Container() {} // destructor (§4.2.2)
};
class Vector_container : public Container { // Vector_container implements Container
public:
Vector_container(int s) : v(s) { } // Vector of s elements
~Vector_container() {}
double& operator[](int i) override { return v[i]; }
int size() override { return v.size(); }
private:
Vector v;
};
但它不是虚函数吗?
【问题讨论】:
-
基类中的虚函数不同。它是常量
-
函数可以通过标记
const来重载。 -
不相关:容器的
size()函数应该返回size_t而不是int。 -
太烦人了。编译器正确地识别问题并提出警告(显然警告被视为错误),但警告是如此无用,以至于让用户感到困惑。输出带有警告的
int size() hides int size() **const**会花费多少额外费用,这样不知情的用户就不会浪费半个小时来想知道出了什么问题? -
我正在使用 XCode,先生。
标签: c++ inheritance polymorphism overriding constants