zoukankan      html  css  js  c++  java
  • 虚函数调用机制

    #include <iostream>
    class Animal
    {
    public:
        Animal(){};
        virtual ~Animal(){};
        virtual void Eat()
        {
            std::cout << "Animal Eat" << std::endl;
        }
    };
    
    class Bird : public Animal
    {
    public:
        Bird(){};
        void Eat()
        {
            std::cout << "Bird Eat" << std::endl;
        }
    };
    
    int main()
    {
        /*
        上次看对象模型,对于多态到底怎么调的不是太清楚,今天又翻开
        在编译的时候每个类的vpt就能确定,以及其中的slot对于的虚函数地址能确定
        如Animal:
        0 -- typeinfo
        1 -- ~Animal
        2 -- Eat
        对于Bird
        0 -- typeinfo
        1 -- ~Bird(搞不太懂为什么是这个也是虚函数)
        2 -- Eat()
        */
        Animal* pAnimal = new Bird;
        /*
        每个类有一个vpt,其中的虚函数的slot的值在编译时就固定了,按c++对象模型Eat这个位置固定为2
        所有运行时根据pAnimal执行的类型调用相应的table的2这个位置的函数地址指向的函数即可,这个就是运行时多态
        根据实际类型查询不同的表即可
        */
        pAnimal->Eat();
        getchar();
        return 0;
    }
  • 相关阅读:
    分页系统
    ORM-数据处理
    Django的用法
    登录cookie写法
    MySQL数据库的安装创建
    前端弹框编写
    ADB常用指令
    Appium环境配置
    Jmeter中传递cookie值
    Jmeter从文件中读取参数值
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4389197.html
Copyright © 2011-2022 走看看