填空题
在下列基类的定义中,有无virtual修饰use成员函数的结果将不同,其原因是______。
当use( )为虚拟函数时的程序执行结果:
sizeof(A)=8
sized(B)=12
sizeof(C)=16
当use( )非虚拟函数时的程序执行结果:
sizeof(A)=4
sized(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)<<endl;
cout<<"sizeof(B)="<<sizeof(B)<<endl;
cout<<"sizeof(C)="<<sizeof(C)<<endl;
}
【参考答案】
采用虚函数的每个派生类都含有一个指向虚函数表的指针,故多4字节。