【问题标题】:Is an overridden pure virtual function, virtual?被覆盖的纯虚函数是虚拟的吗?
【发布时间】:2021-11-01 10:43:40
【问题描述】:

您将在下面看到 3 个类。 我的问题是为什么我可以在FunnySquare 类的getArea() 上使用override,即使它在Square 类中未标记为虚拟 .

我的假设是一个被覆盖的纯虚函数是虚函数,即使它没有被指定,但我不确定这是真的,也找不到任何参考来确认。

class Shape {
  public:
  virtual float getArea() = 0;
};

class Square : public Shape {
  private:
  float length;

  public:
  Square(float len){
    length = len;
  }
  float getArea() override {
    return length * length; 
  }

  void sayHi() {cout << "hell0" << endl;}
};

class FunnySquare : public Square {
  public:
  FunnySquare(float len) : Square(len) {}
  void tellJoke() {std::cout << "I gave you the wrong area haha" << endl;} 
  
  float getArea() override {
    return 2.0;
  }
};

【问题讨论】:

    标签: c++ overriding virtual pure-virtual


    【解决方案1】:

    是的,Square::getAreaFunnySquare::getArea 也是 virtual

    (强调我的)

    那么 Derived 类中的这个函数也是虚拟的(在它的声明中是否使用了关键字 virtual)并覆盖了 Base::vf(无论是否在它的声明)。

    【讨论】:

    • 哪个,顺便说一句。是我讨厌关于 C++ 的众多事情之一。源代码中的任何内容都不应该是“隐式”的。如果一个函数是“虚拟的”,该语言应该要求你说“虚拟”。如果变量是“对象”,则在构造实例时应始终指定“()”。不要让我开始讨论 C++11 如何劫持关键字“auto”...
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2013-10-04
    • 2022-01-13
    • 2021-09-30
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多