问题 问答题

使用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的所有对象公有的,必须使用作用域符“::”进行访问。

单项选择题
单项选择题 A1型题