就业数据资源平台
当前位置:首页 > C++语言程序设计
2012年计算机二级C++练习题:改错题5

改错题
  使用VC6打开考生文件夹下的工程kt10_1,此工程包含一个源程序文件kt10_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:
  classBase
  classD1
  classD2
  classD3
  finBase
  源程序文件kt10_1.cpp清单如下:
  #include<iostream.h>
  classBase
  { public:
   Base(){cout<<"classBase"<<endl;}
   voidf(){cout<<"finBase"<<endl;} };
  classD1:virtualpublicBase
  { public:
   D1(){cout<<"classD1"<<endl;}
   voidf(){cout<<"finD1"<<endl;} };
  /**********found**********/
  classD2:publicBase 
  { public:
   D2(){cout<<"classD2"<<endl;} };
  /**********found**********/
  classD3::publicD1,publicD2
  { public:
   D3(){cout<<"classD3"<<endl;} };
  voidmain()
  { D3d;
   /**********found**********/
   d.f(); }
【参考答案】
  (1)将class D2:public Base
   改为:class D2:virtual public Base
  (2)将class D3::public D1,public D2
   改为:class D3:public D1,public D2
  (3)将d.f();改为:d.Base::f();
【试题解析】
  (1)主要考查对虚基类的理解,虚基类可以解决二义性的问题,其定义方式是在继承列表中使用virtual关键字,使用虚基类可以避免程序运行中对基类函数调用的不惟一;
  (2)主要考查对类的定义方法的掌握,“::”为作用域符,此处应该使用“:”,因为后面是继承列表;
  (3)主要考查对虚基类函数调用过程的理解,只有使用"::"限定才能访问基类函数,否则将会调用自身的函数,如果该类没有该函数的定义,则会自动调用其父类的该函数,所以必须使用“::”符号。
就业数据资源平台