zoukankan      html  css  js  c++  java
  • C++学习笔记:通过Virtual函数和Overload实现多态

    Virtual Functions

    通过Virtual函数实现late-binding。

    Virtual 函数使用Inline是没有意义的;
    静态函数不能为虚函数;不能声明同名的 static virtual 函数;
    构造函数不能定义为Virtual;析构函数可以作为Virtual函数,而且建议这么使用;


    在构造、析构函数中调用其它虚函数时,不使用动态机制,是Local调用;


    如果在继承关系中,虚函数的默认参数取值不同,根据指针的静态类型选择默认参数的取值;

    Base *pBase = new Derived(); //使用Base类函数的默认参数

    Derived *pDer = new Derived(); //使用Derived类函数的默认参数

    基类的destructor为pure virtual时,派生类是否一定要定义函数才能实例化?  //todo
    ==也可以是虚函数;

    Function Overload

    参数匹配的原则

    1. exact matching
    2. trival conversion
    3. integral promotion
    4. standard conversion
    5. user-defined conversion
    6. ellipsis

    函数选择的方式:

    对函数的每一个参数,选择一个候选函数的集合,这些集合的交集就是最终选中的函数。如果交集中有多个函数,编译器会提示错误。

    注意事项

    1. const修饰函数、函数指针类型参数时,被认为是一种新类型。修饰变量的时候不是一种新类型。
    2. 函数只有返回值类型不同是不行的,这无法区分调用。
    3. 如果两个函数都可匹配,const函数优先。都不是const函数时,类型提升优先,如short->int优先于short->char。
    4. default参数,ellipsis参数会影响函数的选择。
  • 相关阅读:
    springboot自定义消息转换器HttpMessageConverter
    fastJson的feature和SerializerFeature属性的解释
    ThreadLocal
    复习面向对象 -- 继承
    复习面向对象--创建对象
    js实现二分查找算法
    SVN问题解决--Attempted to lock an already-locked dir
    封装cookie设置和获取的简易方法
    JS判断客户端是否是iOS或者Android手机移动端(转载)
    【Vue笔记】-- 详解vue生命周期
  • 原文地址:https://www.cnblogs.com/weichsel/p/1826295.html
Copyright © 2011-2022 走看看