操作题 1.  请使用VC6或使用[答题]菜单打开考生文件夹proj1下的工程projl,此工程包含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR  ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
    (4,4)
    注意:只修改注释“//ERROR  ****found****”的下一行语句,不要改动程序中的其他内容。
    //proj1.cpp
    #include  <iostream>
    using namespace std;
    class Point {
    public:
    //ERROR  ********found********
    Point(double x,double y)_x(x),_y(y){}
    double GetX() const {return _x;}
    double GetY() const {return _y;}
    void Move (double xOff, doubleyOff) const
    {_x+=xOff;_y+=yOff;}
    protected:
    double x,y;
    };
    int main()
    {
    Point pt(1.5,2.5);
    pt.Move(2.5,1.5);
    //ERROR  ********found********  以下语句输出pt成员_x和_y的值
    cout<<'('<<pt._x<<','<<pt._y<<')'<<endl;
    return 0;
    }
【正确答案】(1)Point( double x,double y):_x(x),_y(y){}或Point(double x,double y){_x=x;_y=y;}
   (2)void Move(double xOff,double yOff)
   (3)cout<<'('<<pt.GetX()<<','<<pt.GetY()<<')'<<endl;
【答案解析】 本题主要考查Point类,其中涉及构造函数、成员函数及成员函数的调用。构造函数的语法经常考查到,一般会考查形参的类型及名称,本题考查的比较特别,是考查函数成员初始化列表的基本知识。
   (1)主要考查的是构造函数的成员初始化列表的语法,在成员列表之前必须加“:”。
   (2)主要考查成员函数中const的使用,先看Move函数的函数体:
   {_x+=xOff;_y+=yOff;}
   可以看到Point类的两个私有成员一x和-y的值都发生了变化,因此Move函数不能使用const,因为只有在函数内不改变类的成员的值时才能使用const。
   (3)主要考查私有成员不能被类外函数调用的知识。题目要求输出pt成员_x和_y的值,从Point类中的函数doubleGetX()const{return_x;}和double GetY()const{return_y;},可以分别得到_x和_y的值,因此这里使用语句cout<<'('<<pt.GetX()<<','<<pt.GetY()<<')'<<endl;调用成员函数CetX()和GetY()来实现题目要求。
   const用于限定变量的值不发生改变,涉及const函数时,就要先看函数体内部成员的值是否改变,如果改变了就会出现错误。当题目要求输出类的私有成员的值时,首先头脑中就要有一个概念:类外函数不能调用私有成员,只能通过成员函数调用。