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

本文通过示例代码展示了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
*/

 

 

转载于:https://www.cnblogs.com/cswuyg/archive/2010/08/20/1804069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值