使用VC6打开考生文件夹下的工程test23_3,此工程包含一个源程序文件test23_3.cpp,其中定义了类X和它的友元类Y,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)将类X的静态数据成员y初始化为1。请在注释“//**1**”之后添加适当的语句。 (2)完成类Y的构造函数Y(int i,int j)的定义,将参数i赋值给类Y的数据成员,X的对象a中的数据成员x,并且把参数j赋值给类X的数据成员y,请在注释“//**2**”之后添加适当的语句。 (3)完成类Y的成员函数void Display()的定义,将Y的数据成员,X的对象a中的数据成员x和类X的数据成员y按照“x=_,y=_”的形式显示出来(“_”代表一个数字),请在注释“//**3**”之后添加适当的语句。 输出结果如下: x=5,y=l x=6,y=9 x=5,y=9 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件test23_3.cpp清单如下: include<iostream.h> class X {friend class Y; public:void Set(int i) {x=i;}void Display() { cout<<"x="<<x<<","; cout<<"y="<<y<<endl; } private:int x;static int y; }; class Y { public:Y(int i, int j)void Display();private:X a; }; //**1**Y::Y(int i, int j){//**2**}void Y::Display() {//**3**}void main ( ){X b;b.Set(5);b.Display();Y c(6,9);c.Display();b.Display();}
参考答案:
解析:(1) int X::y=1; (2) a.x=i; X;;y=j; (3) cout<<"X="<<a.x<<","; cout<<"y="<<X::y<<endl;本题主要考查考生对于友元类的定义和使用友元类访问的应用,注意(1)中类X的静态成员y应该在类外初始化,而(2)和(3)中对于x和y不同的访问方式就是因为y是静态成员,是类X的所有对象公有的,必须使用作用域符“::”进行访问。