zoukankan      html  css  js  c++  java
  • C++ 多态性分析

    编译 - 时间多态性--函数重载

    编译后的中间代码(例如GCC产生.o文件。此时还不是汇编语言)函数名字有变化,看以下两个样例。

    void cc_show(const char*str)     ->    _Z7cc_showPKc

    void cc_show(int x)            ->     _Z7cc_showi

    大家能够看到,函数名事实上不同,与返回值、函数名、參数有关。

    函数重载的规则就是參数的个数或种类必须不同,所以就不会有混乱了。

    执行时多态--virtual动态绑定

    编译器在编译的时候,会为含有虚函数的类/含有虚函数的类/为基类/的子类创建一个虚函数表(即virtual table)。该表是一个一维数组,存放每一个虚函数的地址。

    那么怎样定位虚表呢?编译器另外还为每一个类的对象提供了一个虚表指针(即vptr)。这个指针指向了对象所属类的虚表。在程序执行时。依据对象的类型去初始化vptr,从而让vptr正确的点他们的类的虚表。因此,虚拟函数调用时,就行了,找到正确的功能。

    虚函数表是一个类,代替一个对象的。对象只需要保持一个指向虚拟函数表它在类中的指针可以是。如果一个类是多重继承,和其他家长也有虚函数。那么这个类需要维护多个虚函数表。

  • 相关阅读:
    pycharm搭建Django项目
    记一次坑爹的Rocketmq排错
    vue关于编辑框的表单变化判断
    PostgreSQL创建空间数据库
    PostgreSQL查询集合结果用逗号分隔返回字符串
    sqoop 抽取 postgres 数据库的数据
    Hive插入parquet格式进行压缩
    python通过kylin的api调度cube
    python的while例子
    numpy和pandas 小计
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4659054.html
Copyright © 2011-2022 走看看