在下列基类的定义中,有无virtual修饰use成员函数的结果将不同,其原因是______。 当use( )为虚拟函数时的程序执行结果: sizeof(A)=8 sized(B)=12 sizeof(C)=16 当use( )

admin2013-02-27  16

问题 在下列基类的定义中,有无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字节。

解析
转载请注明原文地址:https://jikaoti.com/ti/G7L0FFFM
0

最新回复(0)