有时候希望同一个方法在派生类和基类中的行为是不同的。换句话说,方法的行为取决于调用该方法的对象。这种较复杂的行为称为多态——具有多种形态。即同一种方法其行为随上下文而异。有两种重要的机制可用于实现多态公有继承:

在派生类中重新定义基类的方法。

使用虚方法。

如果要在派生类中重新定义基类的方法,通常应将基类方法声明为虚的。这样,程序将根据对象类型而不是引用或指针的类型来选择方法版本。为基类声明一个虚析构函数也是一种惯例。这样做是为了确保释放派生对象时,按正确的顺序调用析构函数。注意virtual只用在声明中,不能用在定义中。

虚方法的演示:

假设要同时管理Brass和BrassPlus账户,如果能使用同一个数组来保存Brass和BrassPlus对象,将很有帮助。这是可能的使用指向Brass类型的指针,就能保证这个数组来表示多种类型的对象,又保证数组的元素都是同一种类型的。这样由于使用的是公有继承模型,因此Brass指针既可以指向Brass对象,也可以指向BrassPlus对象。

为何要使用虚析构函数:

如果析构函数不是虚的话,则将只调用对应指针类型的析构函数。

虚方法就是给引用或指针调用对象时根据对象的类型确定调用哪个方法而设计的。不加virtual的话,就会根据引用或指针的类型调用方法了,这就容易造成一些问题。

最新文章

  1. MIT 6.828 JOS学习笔记17. Lab 3.1 Part A User Environments
  2. 高版本api在低版本中的兼容
  3. VS2010 下 将 EntityFramework 的版本从 4.0 升级到 5.0
  4. 脚本工具: 查看当前系统被写入的FD
  5. 数据库表中存在Text类型的属性时,写sql语句时需要注意喽!
  6. 新手开发android容易出现的错误(不断更新中...)
  7. JDBC 基本操作
  8. 基于s5pv210嵌入式系统busybox文件系统移植
  9. 《OD学hive》第六周20160731
  10. 使用netbeans 搭建 JSF+SPRING 框架
  11. PHP获取当前类名、函数名、方法名
  12. Java框架之Spring MVC(一)
  13. Springdata mongodb 版本兼容 引起 Error [The 'cursor' option is required, except for aggregate with the explain argument
  14. Struts2实现文件上传(三)
  15. Day9 进程同步锁 进程队列 进程池 生产消费模型 进程池 paramike模块
  16. TypeScript专题-Static和使用技巧
  17. STL语法——集合:set 安迪的第一个字典(Andy's First Dictionary,UVa 10815)
  18. 跟我一起使用electron搭建一个文件浏览器应用吧(三)
  19. GBDT 迭代决策树
  20. POD类型

热门文章

  1. 深入剖析SolrCloud(三)
  2. 【HDU4303】Hourai Jeweled
  3. C#获取当前站点的根地址
  4. ROS naviagtion analysis: costmap_2d--Costmap2DROS
  5. boost 时间与日期处理
  6. 浅谈Android内存管理
  7. Java主线程如何等待子线程执行结束(转)
  8. URLRewrite 实现方法详解
  9. .Net Core .Net Core V1.0 创建MVC项目
  10. HtmlAgilityPack 使用