首页 > 解决方案 > 使用虚函数的 C++ 中的嵌套多态性

问题描述

#include <iostream>

class base {
 public:
 virtual void print(){
  std::cout << "base\n";
 }
};

class dr : public base {
 public:
 void print(){
  std::cout << "dr\n";
 }
};


class last : public dr {
 public:
 void print(){
  std::cout << "last\n";
 }
};

int main(){
 dr *d = new last();
 d->print();
 return 0;
}

在上面的代码中,只有base类包含了一个虚函数。 dr并且last不包含虚函数,但多态性仍然有效。这段代码的输出是last。(它应该dr没有多态性)。

这是否意味着只要某些基类具有虚函数,即使派生类都没有虚函数,多态性就可以工作?

标签: c++polymorphism

解决方案


dr::print和override ,它们也是last::print函数;关键字在这里是可选的。base::printvirtual

(强调我的)

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


推荐阅读