【发布时间】:2021-09-04 19:36:38
【问题描述】:
我正在学习 C++ 虚函数。
#include<iostream>
class Base{
virtual void fun(){
std::cout<<"Base\n";
}
};
class Derived:public Base{
void fun(){
std::cout<<"Derived\n";
}
virtual void fun1(){
std::cout<<"Derived 1 \n";
}
};
int main(){
Base* b=new Derived();
b->fun1();
}
我写了这段代码,但它没有编译。根据动态多态的概念,如果我们创建一个指向派生类的基类指针,那么我们可以调用派生类的函数,对吧?使用 Derived 类的虚指针,我们可以调用虚表中的 fun1 函数,对吧?
但是为什么这里不编译呢?
【问题讨论】:
-
多态性不是这样工作的。我在
Base类中看不到fun1()函数。其次,您的Base类缺少虚拟析构函数,因此如果您尝试发出delete b;,您将调用未定义的行为。 -
多态性是关于用一种类型替换另一种类型。即,能够将
Derived替换为Base,但是使用Base。Base没有fun1,没有什么可以替代的。
标签: c++ virtual-functions