Virtual Method

如果一个成员函数函数不声明为virtual的,那么它将根据指针或者引用的类型来调用,否则,它将根据指针或者引用所指的对象类型来调用。

我们可以做一下对比:


现在去掉virtual试试。

现在子类中保留virtual,父类不保留试试。

由此可见这不能实现多态,而且我还发现我的程序不能正常退出,必须强制退出。

现在父类保留virtual,子类不保留,再试试。

所以由此可见,只要是指针或者引用类型中函数是virtual的就可以实现多态了。

事实上只要父类的函数是virtual的,子类中的这个函数也就自动是virtual的,所以最后一种情况和第一种情况是等效的,不过为了提醒程序员,一般的写法就是都加上virtual关键字修饰。

父类的析构函数也要声明成virtual的不仅仅是出于防止资源泄露的考虑,而且是因为这可以实现对象在销毁时调用正确的析构函数和调用析构函数的顺序来析构子类对象的父子成分,因为析构函数也遵循多态机制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 多态(1)静态多态与动态多态 什么是多态 从字面上理解就是多种形态的意思。而多态一词最初源自希腊语,其含义便是“多...
    kingZXY2009阅读 6,908评论 0 2
  • C++ 面向对象编程 博客园地址:http://www.cnblogs.com/xiongxuanwen/p/42...
    先之阅读 3,938评论 0 1
  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 6,551评论 0 22
  • 从小学到大学,一路不愁吃不愁穿,读书的的日子过得春风得意,校内的事情都能处理好,当时感觉自己可棒了,当时在想当我毕...
    8147af2f0ce9阅读 1,828评论 0 0
  • “天炉战法”,首创于薛岳将军,是时任第九战区司令长官的薛岳在抗战时期的得意之作。 “天炉战法”在抗战时期投入实战,...
    章雪峰阅读 15,112评论 13 4

友情链接更多精彩内容