zoukankan      html  css  js  c++  java
  • C++第13周(春)项目1

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759。内有完整教学方案及资源链接

    【项目1 - 点、圆的关系】
    (1)先建立一个Point(点)类。包括数据成员x,y(坐标点);
    (2)以Point为基类。派生出一个Circle(圆)类,添加数据成员(半径)。基类的成员表示圆心;
    (3)编写上述两类中的构造、析构函数及必要运算符重载函数(本项目主要是输入输出)。
    (4)定义友元函数int locate,推断点p与圆的位置关系(返回值<0圆内。==0圆上,>0 圆外);

    int main( )
    {
    	Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1
    	Point 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; }


    參考解答:

    #include <iostream>
    #include<Cmath>
    using namespace std;
    class Point
    {
    public:
        Point(double a=0,double b=0):x(a),y(b) {} //构造函数
        double distance(const Point &p) const;	//求距离
        friend ostream & operator<<(ostream &,const Point &);//重载运算符“<<”
    protected:	  //受保护成员
        double x,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 //circle是Point类的公用派生类
    {
    public:
        Circle(double a=0,double b=0,double r=0) :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;
    }
     
    //推断点p在圆内、圆c内或圆c外
    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;  //圆内
        else
            return 1;  //圆外
    }
     
    int main( )
    {
        Circle c1(3,2,4);
        Point 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; }



    =================== 迂者 贺利坚 CSDN博客专栏=================
    |== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==|
    |== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
    |== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
    ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====



  • 相关阅读:
    基于windows的mysql读写分离和amoeba配置
    windows环境下mysql主从配置
    Mysql主从报错锦集
    Nginx流控
    windows_windows下的rsync
    Kafka+ZooKeeper高可用集群部署
    通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
    Redis性能指标监控
    MongoDB用户权限管理
    ZooKeeper原理详解及常用操作
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5117766.html
Copyright © 2011-2022 走看看