使用VC6打开考生文件夹下的工程test23_3,此工程包含一个源程序文件test23_3.cpp,其中定义了类X和它的友元类Y,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)将类X的静态数据成员y初始化为1。请在注释“//**

admin2010-02-08  33

问题 使用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的所有对象公有的,必须使用作用域符“::”进行访问。
转载请注明原文地址:https://kaotiyun.com/show/lKID777K
0

最新回复(0)