• C++对象内存布局①测试虚函数表属于类


    C++对象内存布局--①测试虚函数表属于类

    测试1:同一个类的多个对象共享同一张虚函数表。

    
    
    

    //虚函数表.cpp
    //2010年8月18日
    //测试虚函数表,说明虚函数表属于类所有。同一个类的多个对象共享同一张虚函数表
    //VS编译器
    #include <iostream>
    using   namespace   std;
    
    class Base
    {
        public :
            Base(int a = 0):a(a)
            {
                cout << "Base::base()" << endl;
            }
            virtual ~Base()
            {
                cout << "Base::~Base" << endl;
            }
            virtual void show()
            {
                cout << "Base::show()" << endl;
            }
        private:
            int a;
    };
    
    int main()
    {
        Base aobj(10);
        typedef void (__thiscall *fun)(void*pThis);//非常重要
        int** p = (int**)&aobj;
        cout << "对象大小     = " << sizeof(aobj) << endl;
        cout << "虚函数表指针 = " << p[0] << endl;
        cout << "成员变量   a = " << p[1] << endl;
        cout << "通过指针调用虚函数表中的函数" << endl;
        ((fun)(p[0][1]))(p);//调用show函数
    
        cout << endl << "测试同一个类的另一个对象" << endl;
        Base bobj(20);
        int** pp = (int**)&bobj;
        cout << "对象大小     = " << sizeof(bobj) << endl;
        cout << "虚函数表指针 = " << pp[0] << endl;
        cout << "成员变量   a = " << pp[1] << endl;
        cout << "通过指针调用虚函数表中的函数" << endl;
        ((fun)(pp[0][1]))(pp);
        system("pause");
        return 0;
    }
    /*
    Base::base()
    对象大小     = 8
    虚函数表指针 = 0041C2B0
    成员变量   a = 0000000A
    通过指针调用虚函数表中的函数
    Base::show()
    
    测试同一个类的另一个对象
    Base::base()
    对象大小     = 8
    虚函数表指针 = 0041C2B0
    成员变量   a = 00000014
    通过指针调用虚函数表中的函数
    Base::show()
    请按任意键继续. . .
    Base::~Base
    Base::~Base
    */
    
    
  • 相关阅读:
    Python三维绘图--Matplotlib colorbar生成
    Python三维绘图--Matplotlib
    VIM剪切板的使用
    三维点云网络PointNet——模型及代码分析
    ECCV2018--点云匹配
    hdu 1905 小数化分数2
    hdu 1755 A Number Puzzle
    hdu 1796 How many integers can you find
    hdu 1452 Happy 2004
    hdu 2837 Calculation
  • 原文地址:https://www.cnblogs.com/cswuyg/p/1804069.html
Copyright © 2020-2023  润新知