问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2,其中在编辑窗口内显示的主程序文件中定义有类Base和Derived,以及主函数main。程序文本中位于每行“//****found****”下面的一行内有一处或多处下画线标记,请在每个下画线标记处填写合适的内容,并删除下画线标记。经修改后运行程序,得到的输出应为: sum=55。 注意:只在横线处填写适当的代码,不要改动程序中的其他内容。 #include <iostream> using namespace std; class Base { public: Base(int m1, int m2) { mem1 =m1; mem2=m2; } int sum () { return mem1 +mere2; } private : int mem1, mem2; //基类的数据成员 }; //派生类Derived从基类Base公有继承 //*************found************** class Derived: ______ { public: //构造函数声明 Derived (int m1, int m2, int m3); //sum函数定义,要求返回mem1、mem2和mem3之和 //*************found************** int sum() { return______+mere3;} private : int mem3; //派生类本身的数据成员 }; //构造函数的类外定义,要求m1和m2分别初始化mem1和mem2, 由m3初始化mem3 //**********found********** ______Derived(int m1, int m2, intm3): //**********found********** ______, mem3 (m3) {} int main() { Base a(4, 6); Derived b (10, 15, 20); int sum=a.sum() +b.sum(); cout <<"sum = " <<sum <<endl; return 0; }
【正确答案】(1)public Base (2)Base::sum() (3)Der4ved:: (4)Base(m1, m2)
【答案解析】[考点] 本题考查的是Base类及其派生类Derived类,其中涉及构造函数和成员函数。构造函数在类外定义时,因为构造函数是属于类的函数,所以函数前也要加上类名和作用域符,派生类的构造函数要先给基类初始化,使用成员列表初始化。 [解析] (1)主要考查考生对公有继承的掌握情况,根据题目要求:派生类Derived从基类Base公有继承,因此这里使用public来公有继承。 (2)主要考查考生对成员函数的掌握情况,根据题目对sum函数的要求:sum函数定义,要求返回mem1、mem2和mem3之和,因此这里直接调用基类的sum函数,再加上mem3就满足题目要求。 (3)主要考查考生对构造函数的掌握情况,由于Derived的构造函数在类外定义,因此要加上类名和作用域符,即Derived::。 (4)主要考查考生对构造函数的掌握情况,因为Derived是Base类的派生类,所以其构造函数要使用成员列表初始化先给Base初始化。 主要考查考生对公有继承、成员函数和构造函数的掌握程度,在派生类中直接调用基类的函数,要在前面加上基类名和作用域符,从而防止派生类中也有相同函数时产生的二义性。