问题 问答题

请使用VC6或使用[答题]菜单打开考生文件夹proj1下的工程proj1。其中有线段类Line的定义。程序中位于每个“//ERROR ****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:
End point 1=(1,8),End point 2=(5,2),length=7.2111。
注意:只修改每个“//ERROR ****found****”下的那一行,不要改动程序中的其他内容。
#include <iostream>
#include <cmath>
using namespace std;
class Line;
double length(Line);
class Line //线段类
double x1,y1; //线段端点1
double x2,y2; //线段端点2
public:
//ERROR **********found**********
Linedouble x1,double y1,doublex2,double y2)const
this->x1=x1;
this->y1=y1;
this->x2=x2;
this->y2=y2;

double getX1()constreturn x1;
double getY1()constreturn y1;
double getX2()constreturn x2;
double getY2()constreturn y2;
void show () const
cout<<"End point 1=("<<x1<<","<<y1;
cout<<"),End point 2=("<<x2<<","<<y2;
//ERROR ********found********
cout<<"),length="<<length(this)
<<"。"<<endl;

;
double length (Line 1)
//ERROR ********found********
return sqrt((1.x1-1.x2)*(1.x1-1.x2)+(1.y1-1.y2)*(1.y1-1.y2));

int main ()
Line r1(1.0,8.0,5.0,2.0);
r1.show();
return 0;

答案

参考答案:

(A)Line(double xA,double yA,double xB,double yB){

(B)cout<<"),length="<<length(*this)<<"。"<<endl;

(C)retum sqrt((A.getXA()-A.getXB())*(A.getXA()-A.getXB())+(A.getYA()-A.getYB())*(A.getYA()-A.getYB()));

解析:

本题考查Line类,其中涉及构造函数、this指针和const函数。判断一个函数是否为const函数,就要观察该函数体内是否有变量值发生改变,若有变量值发生改变,则该函数不是const函数。一般构造函数不能用const,因为要给私有成员赋初始值。类的私有成员不能被类外函数调用,只能通过成员函数调用。

(1)主要考查考生对构造函数的掌握,构造函数要给私有成员赋初始值,因此不能使用const来限制。

(2)主要考查考生对this指针的掌握,由函数length的声明double length(Line);可知,length函数的形参是Line类,在void show()const函数里,this指针指向的是当前Line类,因此可以用*this表示当前Line类。

(3)主要考查考生对成员函数的掌握,length函数是类外函数,不能直接调用类的私有成员,因此要通过成员函数取得对应的值。

this是指向自身对象的指针,它是一个指针类型,因此要使用标识符“*”来取出它所指向的值。

选择题
选择题