zoukankan      html  css  js  c++  java
  • 单继承时虚函数表解析

    1.派生类先继承基类的虚函数表,如果派生类重新定义基类的虚函数,则会覆盖相应的表项,如果派生类定义了新的虚函数,则按照声明的顺序扩充虚函数表。
    2. 注意:对于同时存在于基类和派生类的虚函数,派生类虚函数表的顺序是按照基类虚函数的声明顺序排列的,与派生类声明顺序无关(微信面试题)。

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    
    class Base {
    public:
        virtual void f() { cout << "Base::f" << endl; }
        virtual void g() { cout << "Base::g" << endl; }
        virtual void h() { cout << "Base::h" << endl; }
    
    };
    
    class Derived : public Base
    {
        void g() { cout << "Derived::g" << endl; }
        void h() { cout << "Derived::h" << endl; }
        void f() { cout << "Derived::f" << endl; }
        virtual void i() { cout << "Derived::i" << endl;}
    };
    
    int main()
    {
        Base base;
        typedef void(*pFun)();
        pFun pfun;
        cout << "Based---------------------------------------" << endl;
        for (int i = 0; i < 3; i++)
        {
            pfun = (pFun)*((int *)*(int *)(&base) + i);
            pfun();
        }
        cout << "Derived-------------------------------------" << endl;
        Derived derived;
        for (int i = 0; i < 4; i++)
        {
            pfun = (pFun)*((int *)*(int *)(&derived) + i);
            pfun();
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    20180925-3 效能分析
    20180925-7 规格说明书-吉林市2日游
    20180918博客作业
    第二周例行报告
    2018091-2博客作业
    容器(list集合)
    给应届生们的建议(一定要看哦)!
    MySQL 和 JDBC(Java数据库连接)
    Oracle常用数据库对象(片段)
    7353. 【2021.11.06NOIP提高A组模拟】qaq (qaq)
  • 原文地址:https://www.cnblogs.com/lakeone/p/5927339.html
Copyright © 2011-2022 走看看