课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8894095
【项目1】定义点类,并以点类为基类,派生出直线类,从基类中继承的点的信息表示直线的中点。请阅读下面的代码,并将缺少的部分写出来。
#include<iostream> #include<Cmath> using namespace std; class Point //定义坐标点类 { public: Point():x(0),y(0) {}; Point(double x0, double y0):x(x0), y(y0) {}; void PrintPoint(); //输出点的信息 double x,y; //数据成员,表示点的横坐标和纵坐标 }; void Point::PrintPoint() { cout<<"Point:("<<x<<","<<y<<")"; //输出点 } class Line: public Point //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点 { public: Line(Point pt1, Point pt2); //构造函数,初始化直线的两个端点及由基类数据成员描述的中点,中点的坐标可以由端点坐标计算而来 double Length(); //计算并返回直线的长度 void PrintLine(); //输出直线的两个端点和直线长度 private: Point pts,pte; //直线的两个端点 }; //下面定义Line类的成员函数 int main() { Point ps(-2,5),pe(7,9); Line l(ps,pe); _____________________;//输出直线l的信息(请补全代码) cout<<"\n The middle point of Line: "; _____________________ ;//输出直线l中点的信息(请补全代码,调用成员函数完成) return 0; }
【项目2】要求与项目1几乎完全相同(除Point类中的数据成员要求为private型),要求补全点类和直线类的定义,调用main()函数输出一条直线的信息。
请不要直接copy项目1的代码,通过修改项目1的程序完成项目2的要求。在有关“抄之有道”的学习方法中,我们有阅读代码,然后自己再写出来的建议。所以,项目2可以在以下代码的提示下开始去做,在项目1中获得的经验会有所帮助,这个过程也会对项目1中的收获有更多理解。其实,当这一些技术熟练之后,根据需求会自己设计并实现,那是我们的最终目标。
项目2可以参考的代码如下,在完成时可以根据需要自行添加其他成员函数,成员函数在类内实现还是类外实现,也可以自行决定。
class Point //定义坐标点类 { public: //定义必要的构造函数 void PrintPoint(); //输出点的信息 private: double x,y; //点的横坐标和纵坐标 }; class Line: public Point //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点 { public: Line(Point pts, Point pte); //构造函数,用初始化直线的两个端点及由基类数据成员描述的中点 void PrintLine(); //输出直线的两个端点和直线长度 private: class Point pts, pte; //直线的两个端点 }; int main() { Point ps(-2,5),pe(7,9); Line l(ps,pe); //下面输出直线l的端点、长度和、中点的信息 return 0; }
参考解答:
#include<iostream> #include<Cmath> using namespace std; class Point //定义坐标点类 { public: Point():x(0),y(0) {}; Point(double x0, double y0):x(x0), y(y0) {}; double getX() { return x; } double getY() { return y; } void PrintPoint(); //输出点的信息 private: double x,y; //点的横坐标和纵坐标 }; void Point::PrintPoint() { cout<<"Point:("<<x<<","<<y<<")"; //输出点 } class Line: public Point //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点 { public: Line(Point pts, Point pte); //构造函数,用初始化直线的两个端点及由基类数据成员描述的中点 double Length(); //计算并返回直线的长度 void PrintLine(); //输出直线的两个端点和直线长度 private: class Point pts,pte; //直线的两个端点 }; //构造函数,分别用初始化直线的两个端点及由基类数据成员(属性)描述的中点 Line::Line(Point pt1, Point pt2):Point((pt1.getX()+pt2.getX())/2,(pt1.getY()+pt2.getY())/2) { pts=pt1; pte=pt2; } double Line::Length() //计算并返回直线的长度 { double dx = pts.getX() - pte.getX(); double dy =pts.getY() - pte.getY(); return sqrt(dx*dx+dy*dy); } void Line::PrintLine() { cout<<" 1st "; pts.PrintPoint(); cout<<"\n 2nd "; pte.PrintPoint(); cout<<"\n The Length of Line: "<<Length()<<endl; } int main() { Point ps(-2,5),pe(7,9); Line l(ps,pe); l.PrintLine();//输出直线l的信息 cout<<"\n The middle point of Line: "; l.PrintPoint() ;//输出直线l中点的信息 return 0; }
时间: 2024-10-22 16:48:13