问答题
使用VC6打开考生文件夹下的源程序文件modi3.cpp,通过把类Distance定义为类Point的友元类,来实现计算两点之间距离的功能。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)把类CDistance定义为类CPoint的友元类。请在注释//********1********之后添加适当的语句。(2)定义类CPoint的构造函数,完成给私有数据成员x和y的赋值,并且两个参数的缺省值都为0。请在注释//********2********之后添加适当的语句。(3)完成类CDistance的成员函数length(Point&pPoint,Point&qPoint)的定义,并在其中计算点p、q之间的距离,并且返回结果。假设两点之间的距离distance=sqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y))。请在注释//********3********之后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include<iostream>#include<cmath>using namespace std;class CPoint{public://********1********//定义类Point的构造函数//********2********void display(){cout<<"x="<<x<<endl;cout<<"y="<<y<<endl;}private:float x,y;};class CDiStance{public:float length(CPoint&p,CPoint &q);};float CDistance::length(CPoint&pPoint,CPoint&qPoint){//********3********}int main(){CPoint mPoint(10,10),nPoint(40,50);mPoint.display();nPoint.display();CDistance len;cout<<len.length(mPoint,nPoint)<<endl;return0;}
【正确答案】正确答案:(1)添加语句:friend class CDistance; (2)添加语句:CPoint(float a=0,float b=0){x=a;y=b;} (3)添加语句:return sqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y));
【答案解析】解析:(1)第1个标识下补充定义类CDistance为类CPoint的友元类,声明友元类的格式为:friend<类名>:,故第1个标识下应添加“friend class CDistance;”。 (2)类CPoint的构造函数完成给私有数据成员x和y的初始化,两个参数的缺省值都为0,因此参数含有默认值0,故第2个标识下应添加“CPoint(float a=0.float b=0){x=a:y=b;}”。 (3)类CDistance的成员函数length(CPoint&pPoint,CPoint&qPoint)返回点p、q之间的距离,可由公式distance=sqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y—qPoint.y)*(pPoint.y-qPoint.y))计算求得,第3个标识下应添加“return sqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y));”。