什么是多态:

指不同对象收到相同消息时或相同对象收到不同消息时产生不同的动作。

这里先说下为什么会用到虚函数:

以下面的程序为例:

这个程序中,Carp是Fish的继承类,而Carp中覆盖了Swim这个方法,在MakeFishSwim这个函数中,要使用Fish类的形参,而你将yourFish这个Carp类的实参传递给了这个函数,让他执行Swim这个函数,这会发生什么,上面的程序运行结果:

这说明了什么?说明在MakeFishSwim这个程序中,它定义它的形参是Fish类型的,虽然你将yourFish这个Carp类传到了它那里,它仍然认为yourFish是Fish类的,并调用了Fish类Swim。

显然我们的初衷并不是这样,是希望对应的类执行自己的方法,

【C++】多态 - 虚函数/虚析构函数以及虚函数表相关推荐

  1. c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)

    目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...

  2. 析构函数可以为纯虚函数吗?纯虚函数可以有函数体吗?纯虚函数需要函数体吗?

    先回答标题中中的几个问题: 析构函数可以为纯虚函数吗? yes. 纯虚函数可以有函数体吗? yes. 纯虚函数需要函数体吗? 一般来讲,如果析构函数是纯虚函数,那么析构函数必须要有函数体,如果是其它函 ...

  3. 构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。

    构造函数不可以是虚函数:析构函数可以是虚函数,也可以是纯虚函数. 一:构造函数不能声明为虚函数的原因 1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的. 而在构造 ...

  4. 虚函数、纯虚函数、虚函数与析构函数

    一.虚函数 只有用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数.因为虚函数的作用是允许在派生类中对基类的虚函数重新定义.所以虚函数只能用于类的继承层次结构中. 一个 ...

  5. 为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数?

    为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数 构造函数中为什么不能调用虚函数? 第一个理由是概念上的 第二个理由是机械上的. 构造函数不能声明为虚函数的原因是 1 构造 ...

  6. C++中虚函数工作原理和(虚)继承类的内存占用大小计算

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7883531 一.虚函数的工作原理       虚函数的实现要求对象携带额 ...

  7. cnbloger: 北岛知寒, C++ - 虚基类、虚函数与纯虚函数; csdner: Hsuxu, C++虚基类的实现机制

    If the author of the article is not allowed to reprint, this article will be deleted C++ - 虚基类.虚函数与纯 ...

  8. 虚函数,虚函数表,虚函数实现原理,虚函数实现机制,虚函数解决的问题

    虚函数 虚函数表 虚函数实现原理? 虚函数解决的问题?虚函数解决问题的实现机制? 虚函数模型的构建? 虚函数模型的应用?

  9. 构造函数不可以声明为虚函数,析构函数可以声明为虚函数

    构造函数不能声明为虚函数,而析构函数可以声明为虚函数,在有的情景下析构函数必须声明为虚函数.  不建议在构造函数和析构函数里调用虚函数. 构造函数不能声明为虚函数的原因? 构造一个对象时,必须知道对象 ...

  10. c 语言的虚函数,C 中的虚函数(virtual function)

    一.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的函数.假设我们有下面的类层次: class Father { public: virtua ...

最新文章

  1. AI芯片模型设计AI芯片到底会带来怎样的未来
  2. Logon failed, use ctrl+c to cancel basic credential prompt. 错误
  3. AssertionError: nn criterions don‘t compute the gradient w.r.t. targets
  4. 简单的Android对文件进行读写操作
  5. 文件读取 linux_Linux 进程、线程、文件描述符的底层原理
  6. java启动应用_java 学习:在java中启动其他应用,由jenkins想到的
  7. 阿里云安装kubernetes-UI报错endpoints \kubernetes-dashboard\ not found解决方法
  8. php学生信息管理系统(源码)
  9. linux 的截屏软件下载,Linux 截屏软件 Shutter
  10. Wpa_supplicant 调试故障原因分析
  11. Python基础入门:函数--阿里云天池
  12. linux下重要目录的作用
  13. apollo(阿波罗) 分布式部署指南
  14. 关于不同操作系统下浏览器兼容问题
  15. abp web ui 负号提前显示
  16. 使用linux sort给一个文件里的内容按规则排序
  17. IoT企业物联网平台,从设备端到云端业务系统全链路开发实战——实践类
  18. CentOS6云服务器磁盘扩容方案
  19. python c++情侣网名含义_python的对象与名字绑定(转贴,此文甚好)
  20. 数据结构与算法分析-二叉树,树和森林

热门文章

  1. python 收取邮件 exchange_Exchange服务器之python 使用exchange发送邮件
  2. Android编程中调用Camera时预览画面有旋转问题的解决方法
  3. 读懂“人性”你会发现:高手毁掉一个人有多简单?只需要两个手段——“期望效应”,又称“罗森塔尔效应”、“皮格马利翁效应”
  4. Hadoop架构概述
  5. Java笔记-多线程之线程控制
  6. jQuery遮罩插件jQuery.blockUI.js简介
  7. 证途网:一级造价工程师相关了解
  8. 单张图片风格人脸卡通化: 试玩JoJoGAN
  9. 智能儿童手表4G用户隐私政策
  10. 【托福写作】TPO 1