使用VC6打开考生文件夹下的工程MyProj11。此工程包含一个源程序文件 MyMain11.cpp。程序中定义了3个类A、B和C,但类C的定义并不完整。
请按要求完成下列操作,将类的定义补充完成:
①类C是基类A和B公有派生来的。请在注释“//* *1* *”之后添加适当的语句。
②完成构造函数C(int k)定义,采用初始化列表的方式使基类A私有成员a初始化为k-2,基类B的私有成员b初始化为k+2,类C的私有成员c初始化为k。请在注释“//* *2* *”之后添加适当的语句。
③完成类Derived的成员函数disp()的类体外的定义。函数disp()中要分别显式调用基类A、B的disp()函数,然后要输出私有成员c的值。请在注释“//* *3* *”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain11.cpp清单如下;
//MyMain11.cpp
#include <iostream>
using namespace std;
class A
private:
int a;
public:
A(int i) a=i;
void disp()
cout<<a<<" , "
;
class B
private:
int b;
public:
B(int j) b=j;
disp ( )
cout<<b<<", ";
;
//* * *1* * *
private:
int c;
public:
//* * *2* * *
void disp();
;
void c::disp()
//* * *3* * *
int main ( )
C obj(10);
obj.disp();
return 0;
参考答案:
①clas C:public B,public A
②C(int k):A(k-2),B(k+2),c(k){}
③A: :disp(); B: :disp();cout<<c<<end1;
解析: 程序中定义了3个类A、B和C,其中类C是由类A和类B共同派生而来的。因此,派生类C的构造函数不仅负责初始化派生类对象的基类成员,还要对派生类C的新增成员c进行初始化。对于第3处要求显式调用基类的disp()函数,可采用作用域分辨符“::”来调用基类的成员函数。