第十一周项目三 继承之直线类点类
2016-05-10 21:07
288 查看
/* *Copyright(c) 2016,烟台大学计算机学院 *作 者:刘金石 *完成日期:2016年5月10日 *问题描述: 定义点类Point,并以点类为基类,派生出直线类Line,从基类中继承的点的信息表示直线的中点。 */ #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 getX() { return x; } double getY() { return y; } protected: double x,y; //点的横坐标和纵坐标 }; void Point::PrintPoint() { cout<<"Point: ("<<x<<","<<y<<")"<<endl; //输出点 } class Line: public Point //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点 { public: Line(Point pts, Point pte); //构造函数,用初始化直线的两个端点及由基类数据成员描述的中点 double Length(); //计算并返回直线的长度 void PrintLine(); //输出直线的两个端点和直线长度 private: class Point pts,pte; //直线的两个端点,从Point类继承的数据成员表示直线的中点 }; 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<<" 2nd "; pte.PrintPoint(); cout<<" The Length of Line: "<<Length()<<endl; } int main() { Point ps(-2,5),pe(7,9); Line l(ps,pe); cout<<"About the Line: "<<endl; l.PrintLine(); //输出直线l的信息:两端点及长度 cout<<"The middle point of Line is: "; l.PrintPoint(); //输出直线l中点的信息 return 0; }
运行结果:
学习心得:
我感觉这个问题写直线类的构造函数是一个难点,直线类的数据成员是两个点类,但是从点类继承过来的x,y确实直线的中点,实在写不出来,就参考了老师写的,在初始化列表中构造中点,然后在函数主体部分写两个点数据成员的构造。
相关文章推荐
- C语言 二进制中1的个数
- 将数据显示到屏幕上(用ListView)
- 剑指offer之面试题6重建二叉树
- 多线程02:《疯狂Java讲义》学习笔记——线程的创建和启动
- 设计模式总结之装饰者模式
- 新人刚刚注册
- 数据库实验一
- DUBBO配置规则详解
- 图像特效---旋转模糊滤镜
- jQuery -- 下载与引入到文件
- BZOJ 3011 Running Away From the Barn
- java内存管理总结
- java版实时获取access_token
- python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典
- Surrounded Regions
- HUSTOJ 1017:三个整数是否相邻
- GitHub入门学习
- addFieldError与addActionError的区别
- Android 面试题汇总
- C语言 打印1到最大的N位数(输入3,打印1,2,3~999)