C++语言程序设计

下面这个例子可以让我们看到VPTR的用法：

| 例11-20

#include "iostream.h"
//没有虚函数的类
class A
{
public:
int a;
A():a(0){}
};
//有一个虚函数的类
class B
{
public:
int a;
B():a(0){}
virtual void func(){}
};
//有两个虚函数的类
class C
{
public:
int a;
C():a(0){}
virtual void func(){}
virtual void func2(){}
};

void main()
{
cout<<"没有虚函数的类大小是"<<sizeof(A)<<endl;
cout<<"有一个虚函数的类大小是"<<sizeof(B)<<endl;
cout<<"有两个虚函数的类大小是"<<sizeof(C)<<endl;
A a;
B b;
C c;
int* tmp;
tmp=(int*)&b;
//打印对象b中两个整型单元中的值
cout<<(*tmp)<<endl;
cout<<(*(tmp+1))<<endl;
//改变b中成员a的值
b.a=1;
//再次打印对象b两个整型单元中的值
cout<<(*tmp)<<endl;
cout<<(*(tmp+1))<<endl;
}

程序运行结果为：
没有虚函数的类大小是4
有一个虚函数的类大小是8
有两个虚函数的类大小是8
4358196
0
4358196
1