zoukankan      html  css  js  c++  java
  • 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
    */
    
    
  • 相关阅读:
    中考 2020 游记
    CodeChef 2020 July Long Challenge 题解
    GDOI2020 游记
    AtCoder Grand Contest 044 题解
    ISIJ2020 不知道算不算游记
    WC2020 拿铁记
    UOJ Round 19 题解
    本博客采用 CC BY-NC-SA 4.0 进行许可
    [算法模版]回文树
    AddressSanitizer
  • 原文地址:https://www.cnblogs.com/cswuyg/p/1804069.html
Copyright © 2011-2022 走看看