1、所谓虚化,就是根据引用或者指针的真实类型,决定调用哪个方法。

2、构造方法虚化,就是根据引用(或者指针)的真实类型,构造出一个对象,如果指针的真实类型是Base,返回Base*;如果指针的真实类型是Derived,返回Derived*。解决办法是:Base定义一个virtual方法Clone,调用new Base(*this),返回Base*;Derived重写Clone方法,调用new Derived(*this),返回Derived*。注意:一般情况下,子类重写父类方法,要求返回类型必须一致。目前,父类返回Base*,子类重写可以返回Derived*,也就是说C++支持协变。(口诀:进去叛逆,出来和谐)

3、将非成员方法虚化,考虑output操作符<<的虚化。C++的多态是动态单分派,只会根据方法拥有者的真实类型决定调用哪个方法,因此要让<<虚化,需要在Base中定义方法virtual ostream& operator<<(ostream& str) ; 但是,这种情况下,要b<<cout这样写,这显然不符合常规。那该怎么办?

  使用非成员方法ostream& operator<< (ostream& s, const Base& b); 在该方法中调用虚方法b.print(s);

【M25】将构造方法和非成员方法虚化相关推荐

  1. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...

  2. JavaSE基础之构造器(构造方法)和一般方法

    一.概念: 1.构造方法 语法格式: 修饰符 类名(参数类型 参数1,参数类型 参数2,...){.....} 用于创建对象并初始化对象属性的方法,叫"构造方法",也叫" ...

  3. java 构造方法和析构方法_PHP面向对象程序设计之构造方法和析构方法详解

    本文实例讲述了PHP面向对象程序设计之构造方法和析构方法.分享给大家供大家参考,具体如下: 构造方法和析构方法是对象中的两个特殊方法,它们都与对象的生命周期有关.构造方法是对象创建完成后第一个被对象自 ...

  4. python中构造方法和析构方法的区别_基于Python构造方法与析构方法的研究

    基于 Python 构造方法与析构方法的研究 林观德 [期刊名称] < <现代职业教育> > [年 ( 卷 ), 期] 2019(000)018 [摘要] Python 语言是 ...

  5. java定义一个长方形类,该类中具有长方形长宽两种属性,并具有相应的构造方法属性访问方法,计算长方形的周长和面积的方法,要求输出长是5,宽是4的长方形

    定义一个长方形类,该类中具有长方形长宽两种属性,并具有相应的构造方法 属性访问方法,计算长方形的周长和面积的方法,要求输出长是5,宽是4的长方形 public class test3 {public ...

  6. python定义一个圆类_python设计一个Circle(圆)类,包括圆心位置`,半径,颜色等属性。编写构造方法和其他方法,计算周长和面积。...

    ** Python:设计一个Circle(圆)类,包括圆心位置`,半径,颜色等属性.编写构造方法和其他方法,计算周长和面积.请编写程序验证类的功能. class Circle: def -init-( ...

  7. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第32讲:PHP 构造方法、析构方法

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第32讲:PHP 构造方法.析构方法 构造方法__construct()的主要作用是完成对新对象的初始化,没有返回值,析构方法__destruct的作用主要用 ...

  8. python中构造方法和析构方法的区别_类的构造方法、析构方法、实例方法

    类的构造方法.析构方法.实例方法 上一个小节我们学习了 Python 的类属性和实例属性的知识点,这个小节我们还是会学习关于类的知识.这节课我们会学习类的构造方法.析构方法和实例方法. 1. 实例方法 ...

  9. java构造方法和普通方法区别

    java构造方法和普通方法 构造方法 构造方法也叫做构造器,使用来创建一个实例对象的. 1.构造方法必须和类名一致,并且没有返回值 public class Test{public Test(){} ...

最新文章

  1. 计算机基础理论汇编,计算机基础知识:计算机中的汇编语言
  2. linux在文档中查找内容,【Linux】用grep在文档中查找内容
  3. iOS开发-多线程开发之线程安全篇
  4. Huggingface BERT源码详解:应用模型与训练优化
  5. Mac10.9 Mavericks 输入法切换快捷键
  6. centos6安装mysql并远程连接_阿里云服务器上安装redis并实现远程连接
  7. 创建一个对象和i++是否原子性的理解
  8. Visual Studio使用ILDasm反汇编工具查看托管模块
  9. 利用PhotoShop批量压缩和转换图片格式
  10. EasyUI Combobox 的 onChange,onSelect,onClick 事件
  11. teamviewer Android 8,利用TeamViewer控制设备
  12. Robot Rapping Results Report CodeForces - 645D
  13. Android动画之AnimatorSet联合动画用法
  14. win10-LTSC2019装机必备操作和软件备忘录
  15. 【每天读一点英文】gnuhpc:Two Truths to Live By
  16. 软件体系结构:应用软件的设计与开发
  17. oracle统计合格率,Oracle命准率及优化配置
  18. 使用DrawerLayout实现QQ5.0侧拉菜单效果
  19. sql嵌套查询时避免报错的方式
  20. 福建省泉州市谷歌卫星地图下载(百度网盘离线包下载)

热门文章

  1. 技术公开课:SQL Server 索引优化原则与工具
  2. 布线管理的设计(一)
  3. 【笔记】2-SAT (tarjan)
  4. 让人欲罢不能的量子学
  5. HDU2012 素数判定
  6. centos常用网络管理命令
  7. Qt控件中的属性sizePolicy说明
  8. objective-C 的内存管理之-引用计数
  9. Docker(二) docker帮助、镜像及容器相关操作命令介绍
  10. Java生产环境下性能监控与调优详解 第3章 基于JVisualVM的可视化监控