zoukankan      html  css  js  c++  java
  • 【M25】将构造方法和非成员方法虚化

    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);

  • 相关阅读:
    java基础 ——String类型
    WinSCP密钥登录,实现文件上传
    linux 文件压缩,以及解压
    win10的资源管理器,边框不见了
    在360浏览器中打开表单,回显错误数据
    java返回数据工具类
    WEB工具类
    JSON 的几种转换
    二维码生成工具类
    XML的几种转换
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3624003.html
Copyright © 2011-2022 走看看