使用VC6打开考生文件夹下的工程test37_3。此工程包含一个test37_3.cpp,其中定义了类Letter和Number以及Grid,其中Grid类由Letter类和Number类public派生,但三个类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)添加类Letter的带一个参数c的构造函数,c是char型的数据,默认值为’A’,该函数把参数c的值赋给类的保护成员ch,请在注释“//**1**”之后添加适当的语句。
(2)添加类Number的带一个参数n的构造函数,n是int型的数据,默认值为0,该函数把参数n的值赋给类的保护成员num,请在注释“//**2**”之后添加适当的语句。
(3)添加派生类Grid构造函数的定义,传入的参数为char型的c和血型的n,并将其分别赋值给基类的ch和num,请在注释“//**3**”之后添加适当的语句。
(4)完成派生类Grid的友元函数——“<<”运算符重载的定义,使其以格式“[g.ch,g.num]”输出,请在注释“//**4 **”之后添加适当的语句。
源程序文件test37_3.cpp清单如下:
#include<iost ream. h>
class Letter
protected:
char ch;
public:
// ** 1 **
;
class Number
protected:
int num;
public:
// ** 2 **
;
class Grid : public Letter, public Number
public:
// ** 3 **
friend ostream& operator<<(ostream &o,Grid &g);
;
// ** 4 **
o << "[" << g.ch << ", "<< g.num << "]";
return o;
int main ( )
Grid g(’C’, 3);
cout << "Grid reference: "<< g << end1;
return 0;
参考答案:
(A)
Letter(char c=’A’){ch=c;}
(B)
Number(int n=0){num=n;}
(C)
Grid(char c=’A’,int n=0):Letter(c),Number(n){}
(D)
ostream &operator<<(ostream &o,Grid &g)
解析:
主要考查考生对于类和派生类的构造函数的定义以及重载为友元的运算符函-数的定义的掌握,其中(3)使用了参数列表进行变量赋值,这是派生类构造函数中经常使用的,(4)对于友元函数在类体外的定义不需要使用作用域符,而ostream类的对象引用可直接使用原来意义的符号“<<”进行输出。