zoukankan      html  css  js  c++  java
  • C++ | 虚函数产生条件

    虚函数产生的条件

    能否成为虚函数主要有以下两种判断依据,如果以下两种条件均满足,则具有成为虚函数的条件。

    • 1、虚函数机制为动多态提供支持,而虚函数表中存放着虚函数的地址。因此虚函数必须是可以取地址的函数。

    • 2、虚函数的调用是依靠(对象的)虚表指针解引用得到虚表,再从虚表中找到对应的虚函数入口地址。换言之,虚函数依赖对象调用

    在C++的类中主要存在以下几种函数:

    1. 构造函数

    构造函数不能依赖对象调用 。对象产生的步骤主要有二:1、开辟内存空间,2、调用构造。这两部操作完成之后才会有对象生成。因此,不能成为虚函数。

    2.析构函数

    析构函数调用前,对象完整,与既有的逻辑不冲突,理论上可以手动调用析构函数。事实上也的确如此,形如 Obj.~Test() (在Test类中)的调用方法。可以成为虚函数。

    3.内联函数

    由inline 关键字修饰的函数,内联函数在函数的调用点直接展开,因此内联函数不可以取地址 ,不能成为虚函数。

    4.static修饰的函数

    static修饰的函数使用 __cdecl 调用约定(类成员方法使用 __thiscall 约定),而此类函数不依赖对象调用 ,因此,不能成为虚函数。

    5.全局函数

    毫无疑问,全局函数不依赖对象调用 。与类没有关系,不可能被写入类的虚表。不能成为虚函数。

    6.类成员方法

    显然类成员方法可以成为虚函数。



    附:
    虚函数初探: https://blog.csdn.net/weixin_43919932/article/details/104157463
    动多态的发生时机: https://blog.csdn.net/weixin_43919932/article/details/104389342

  • 相关阅读:
    TweenMax 前台脚本库
    如何使用CSS Sprites技术进行图片合并
    QQ群开放接口
    使用 Hexo 生成一套静态博客网页
    把表插入数据库
    WCF
    SOA
    登录验证
    登录菜单权限验证
    GetJsonByDataTable
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680128.html
Copyright © 2011-2022 走看看