Skip to main content
 Web开发网 » 操作系统 » linux系统

c++虚函数的作用是什么?

2021年10月14日5540百度已收录

虚函数是学习类和对象这一模块的一个重点,对于部分人来说可能也是个难点。有必要详细讲解。以下是本人亲自调试的结果,调试基于windows下的VisualStudio2017。虚函数的作用:使得通过基类类型的指针,可以使属于不同派生类的不同对象产生不同的行为。否则基类指针访问派生类对象时访问到的只是从基类继承来的同名成员。废话少说直接上图。

c++虚函数的作用是什么?  C++对象模型 第1张

运行结果:

这是Base的display()

这是Base2的display()

这是Base3的display()

由以上的部分截图可以看到,Base是基类,Base2,Base3是派生类。display的函数有virtual关键字声明,为虚函数。因为display为虚函数,使得fun函数成功的实现了通过基类指针访问到了正在指向的对象成员,这就是运行中的多态。而如果我们没有没有声明为虚函数,则运行结果是这样的:

这是Base的display()

这是Base的display()

这是Base的display()

原因在于派生类并没有改写从基类继承来的display()函数,只是多了一个同名函数而已。而通过基类指针访问到的只是从基类继承来的那个。

虚析构函数在c++中虽然不能声明虚构造函数,但是可以声明虚析构函数,当一个类的析构函数是虚函数,那么由它派生来的所有子类的析构函数也是虚函数。值得注意的是:如果有可能通过基类指针调用对象的析构函数(通过delete),就需要让基类的析构函数为虚函数。再上图:

c++虚函数的作用是什么?  C++对象模型 第2张

运行结果:

Base destructor

这说明通过基类指针删除派生类对象时调用的是基类的析构函数,派生类的析构函数没有被执行。因此派生类的对象中动态分配的内存空间没有得到释放,造成内存泄漏,这是非常危险的。而避免上述错误的方法就是将析构函数声明为虚函数。

另外,与之相关的还有纯虚函数,抽象类等内容,限于篇幅这里不再多说,喜欢我的回答请关注小编,我们一起探讨学习问题,感谢大家看到结尾!

评论列表暂无评论
发表评论
微信