填空题
在下列基类的定义中,有无virtual修饰use成员函数的结果将不同,其原因是 【15】 。
当use()为虚拟函数时的程序执行结果:
sizeof(A)=8
sizeof(B)=12
sizeof(C)=16
当use()非虚拟函数时的程序执行结果:
sizeof(A)=4
sizeof(B)=8
sizeof(C)=12
源程序如下:
#include <iostream. h>
class Grandad
{
public:
Grandad(): money(10) {}
int money;
virtual void use() {}
},
class Father: public Grandad
{
public:
Father( ), money(100) {}
int money;
void use() {}
};
class Son: public Father
{
public:
Son(): money(300){}
int money;
void use(){}
};
void main(void)
{
Grandad A: Father B; Son C;
cout <<"sizeof(A)="<<sizeof(A)<<end1;
cout <<"sizeof(B)="<<sizeof(B)<<end1;
cout <<"sizeof(C)="<<sizeof(C)<<end1
【参考答案】
采用虚函数的每个派生类都含有一个指向虚函数表的指针,故多4字节。