zoukankan      html  css  js  c++  java
  • C++ 虚函数表解析

    虚函数表

    class Base {

    public:

        virtual voif f() {

            cout << "Base::f" << endl;

        }    

        virtual void g() {

        }    

        

        virtual void h() {

        }    

    };

    在上面这个类中, 虚函数表是这样设置的

    一般继承(无虚函数覆盖)

     

    对于这样的继承关系, 虚函数表的结构是

     

    从上面两张图我们可以看到两点

    1. 虚函数按照其声明顺序放在虚函数表中

    2. 父亲的虚函数放在孩子的虚函数之前

    一般继承(有虚函数覆盖)

     

     

     从上面两张图中, 我们可以看到两点

    1. 覆盖的 f() 函数被放到虚函数原来父函数的位置

    2. 其他函数的相对位置不变

    多重继承(无虚函数覆盖)

     

    可以看出

    1. 每个父类都有自己的虚函数表

    2. 子类的成员函数被放到第一个虚函数表

    多重继承(有虚函数覆盖)

     

     

    有了这种表, 我们便可以实现

    Derive d;

    Base1 *b1 = &d;

    Base2 *b2 = &d;

    Base3 *b3 = &d;

    b1->f(); //Derive::f()

    b2->f(); //Derive::f()

    b3->f(); //Derive::f()

    b1->g(); //Base1::g()

    b2->g(); //Base2::g()

    b3->g(); //Base3::g()

    转自: http://blog.csdn.net/haoel/article/details/1948051

  • 相关阅读:
    简易版Spring Ioc (转载)
    网站策划:网站用户需求分析
    js实现树形菜单
    js实现滑动门效果
    HTML的DOM对象的nodeName
    javascript实现页面悬浮导航
    jQuery EasyUI 窗口 – 创建简单窗口
    Exceptions
    Java Cookbook-Date and Times
    表单属性深入
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3640693.html
Copyright © 2011-2022 走看看