c++ - 使用虚函数的 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
没有多态性)。
这是否意味着只要某些基类具有虚函数,即使派生类都没有虚函数,多态性就可以工作?
解决方案
dr::print
和override ,它们也是last::print
虚函数;关键字在这里是可选的。base::print
virtual
(强调我的)
那么 Derived 类中的这个函数也是虚拟的(无论在其声明中是否使用了关键字 virtual)并覆盖了 Base::vf(无论在其声明中是否使用了 override 这个词)。