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

改错题
  使用VC6打开考生文件夹下的工程kt11_1,此工程包含一个源程序文件kt11_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
  Valuesare:1,2and3
  Pressanykeytocontinue
  源程序文件kt11_1.cpp清单如下:
  #include<iostream.h>
  classCommonBase
  { public:
   intx; };
  /*****************found*****************/
  classDeriveCommonA::publicCommonBase
  { public:
   inty; };
  classDeriveCommonB:publicCommonBase
  { public:
   intz; };
  /*****************found*****************/
  classOverlapping:publicDeriveCommonA;publicDeriveCommonB
  { public:
   voidDisplay()
   { cout<<"Valuesare:"<<DeriveCommonA::x<<","<<y<<"and"<<z<<endl; } };
  intmain()
  { Overlappingov;
   /*****************found*****************/
   ov.x=1;
   ov.y=2;
   ov.z=3;
   ov.Display();
   return0; }
  
【试题解析】
  (1)主要考查对派生类定义的理解,C++规定的继承格式是在类名的后面加冒号,之后是继承方式和继承类的名称,题目中错误的使用了作用域运算符;
  (2)主要考查多继承的定义,多继承的格式基本上和单继承相同,不过在多个基类之间应该使用逗号分开,题目中错误的使用了分号,分号在C++中是结束标志;
  (3)主要考查对派生类的对象访问的掌握,x是类CommonBase的成员,如果不加限制的访问就会产生二义性,编译程序不知道这个x是A类的,还是B类的,所以必须使用作用域限制符“::”,为了解决这个问题可以使用虚基类。
就业数据资源平台