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

admin2010-06-06  22

问题 在下列基类的定义中,有无virtual修饰use成员函数的结果将不同,其原因是【 】。
           当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字节。
转载请注明原文地址:https://jikaoti.com/ti/XPW0FFFM
0

最新回复(0)