(1)先建立一个Point(点)类,包含数据成员x,y(坐标点);
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心;
(3)编写上述两类中的构造、析构函数及必要运算符重载函数(本项目主要是输入输出);

(4)定义友元函数int locate,判断点p与圆的位置关系(返回值<0圆内,==0圆上,>0 圆外);

#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:Point():x(0),y(0){}Point(double a,double b):x(a),y(b){}double distance(const Point &p)const;friend ostream & operator<<(ostream &,const Point &);
protected:double x;double y;
};
double Point::distance(const Point &p) const
{double dx = x-p.x;double dy = y-p.y;return sqrt(dx*dx+dy*dy);
}
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;return output;
}class Circle:public Point
{
public:Circle():Point(),radius(1){};Circle(double a,double b,double r):Point(a,b),radius(r){}friend ostream &operator<<(ostream &,const Circle &);friend int locate(const Point &p, const Circle &c); //判断点p在圆上、圆内或圆外,返回值:<0圆内,==0圆上,>0 圆外
protected:double radius;
};
ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<", "<<c.y<<"], r="<<c.radius<<endl;return output;
}
int locate(const Point &p, const Circle &c)
{const Point cp(c.x,c.y); //圆心double d = cp.distance(p);if (abs(d - c.radius) < 1e-7)return 0;  //相等else if (d < c.radius)return -1;  //圆内elsereturn 1;  //圆外
}
int main( )
{Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外cout<<"圆c1: "<<c1;cout<<"点p1: "<<p1;cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;cout<<"点p2: "<<p2;cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;cout<<"点p3: "<<p3;cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;return 0;
}

运行结果:

转载于:https://www.cnblogs.com/mayuko/p/4567479.html

第十二周项目4-点、圆的关系相关推荐

  1. 第十二周项目4-利用遍历思想求解图问题(6-7)

    /* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十二周项目4-利用遍历思想求解图问题(6-7) 作 者:佟兴锋 完成日期: ...

  2. 第十二周项目二-Time类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  3. 第十二周项目一-实现复数类中的运算符重载(3)

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月15日*版 本 号:v1. ...

  4. 第十二周项目一----图基本算法库

    /*烟台大学计算机与控制工程学院 作者:孙潇 时间:2015年11月13日 问题描述:定义图的邻接矩阵和邻接表存储结构,实现其基本运算,并完成测试. 输入描述:无 输出描述:若干数据 */ 头文件: ...

  5. 第十二周项目五-----迷宫问题之图深度优先遍历解法

     烟台大学计算机与控制工程学院 作者:孙潇 时间:2015年12月15日 问题描述:[项目 - 迷宫问题之图深度优先遍历解法]   设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题.   ( ...

  6. 第十二周项目二----操作用邻接表存储的图

    /*烟台大学计算机与控制工程学院 时间2015年12月14日 作者:孙潇 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的 ...

  7. 第十二周项目5-迷宫问题之图深度优先遍历解法

    问题: /* * Copyright(c)2015,烟台大学计算机学院 * All right reserved. * 文件名称:项目5.cbp * 作者:李艺 * 完成日期:2015年11月20日 ...

  8. 第十二周项目1-阅读程序(三)

    含有递归函数的程序 /**Copyright (c) 2014,烟台大学计算机学院*All gight reserved.*文件名称:temp.cpp*作者:邵帅*完成时间:2014年11月13日*版 ...

  9. 第十二周项目三-数组类运算的实现

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

最新文章

  1. 设计模式 命令模式 之 管理智能家电
  2. 搜索功能:洞悉产品的绝佳入口
  3. java测试工程师需要掌握什么_测试工程师需不需要了解开发知识?
  4. “拯救网站运维经理赵明”有奖方案征集启事
  5. 为什么电脑不能打字_嘉兴在线丨「生活经济学」为什么笔记本电脑能在任何国家的供电标准下运作,其他大部分电器却不能?...
  6. acdream 1042: Classification of the species 抽象无根树并查集
  7. sd卡、U盘作为启动盘后容量变小处理方法
  8. 希腊字母|罗马数字|中文数字大写
  9. 怎么使用计算机唱歌,声卡怎么用手机唱歌
  10. 鸿蒙应用开发 | 时间选择器(TimePicker)的功能和用法
  11. tolist()的作用
  12. 中国最美的十大宗教名山(图)
  13. 超简单方法搭建Eclipse下的Android NDK
  14. 解决 Ubuntu 22.04 Fractional Scaling 画面伸缩后应用程序模糊
  15. 重构改善既有代码设计
  16. -moz-zoom-in 和-moz-zoom-out
  17. html调用腾讯地图定位当前位置,vue web项目中调用腾讯地图API获取当前位置的经纬度...
  18. 【大数据技术基础系列】列式数据库与基于行的数据库存储数据结构
  19. 阿里大鱼短信发送接口开发
  20. Android开发经验谈-很少有人会告诉你的Android开发基本常识

热门文章

  1. Asp.net基础概念之 HttpModule
  2. java中String,int,Integer,char、double类型转换
  3. Flask的flask-sqlalchemy
  4. 去掉主页 breadcrumb导航条上的Liferay字样
  5. android中一个解决办法
  6. 学习Windows2008——设计活动目录
  7. 使用fswatch工具进行golang的热编译
  8. java读取文件效率问题
  9. BGP基本实验拓扑图--《献给学习的人》
  10. 半年没活动了,来活动一下