A-A+

在下列基类的定义中 有无virtual修饰use成员函数的结果将不同 其原因是______。

2022-08-05 22:18:27 问答库 阅读 172 次

问题详情

在下列基类的定义中,有无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字节。
采用虚函数的每个派生类都含有一个指向虚函数表的指针,故多4字节。

考点:函数,定义