• (C++核心编程 )点和圆的关系


    设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。

    未分文件书写版:

    #include <iostream>
    using namespace std;
    #include <string>
    
    //点类
    class Point
    {
    public:
        //设置X坐标
        void setX(int x)
        {
            m_x = x;
        }
        //获取X坐标
        int getX()
        {
            return m_x;
        }
        //设置Y坐标
        void setY(int y)
        {
            m_y = y;
        }
        //获取Y坐标
        int getY()
        {
            return m_y;
        }
    
    
    private:
        int m_x;
        int m_y;
    };
    
    
    //设置一个圆类Circle
    class Circle
    {
    public:
        //设置半径
        void setR(int r)
        {
            m_R = r;
        }
        //获取半径
        int getR()
        {
            return m_R;
        }
        //设置圆心
        void setCenter(Point center)
        {
            m_center = center;
        }
        //获取圆心
        Point getCenter()    //m_center是Piont类的数据
        {
            return m_center;
        }
    
    
    private:
        int m_R;
        //在类中可以让另一个类 作为本类中的成员--与结构体相似
        Point m_center;
    };
    
    
    //判断点和圆的关系
    void isInCircle(Circle& c, Point& p)
    {
        if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) == c.getR() * c.getR())
            cout << "点在圆上" << endl;
        else if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) > c.getR() * c.getR())
            cout << "点在圆外" << endl;
        else
            cout << "点在圆内" << endl;
    }
    
    int main()
    {
        //创建并设置点P1
        Point P1;
        P1.setX(10);
        P1.setY(9);
    
        //创建并设置点P2--圆心
        Point P2;
        P2.setX(10);
        P2.setY(0);
    
        //设置圆C1
        Circle C1;
        C1.setR(10);
        C1.setCenter(P2);
    
        isInCircle(C1, P1);
    
        system("pause");
        return 0;
    
    }

    分文件版

    point.h

    #pragma once    //防止头文件重复包含
    #include<iostream>
    using namespace std;
    
    
    
    //点类
    class Point
    {
    public:
            //设置X坐标
            void setX(int x);
    
            //获取X坐标
            int getX();
    
            //设置Y坐标
            void setY(int y);
    
            //获取Y坐标
            int getY();
        
    
    
    private:
        int m_x;
        int m_y;
    };

    point.cpp

    #include"point.h"
    
    
    //只需留下函数的实现即可
    
    
        //设置X坐标
        void Point::setX(int x)
        {
            m_x = x;
        }
        //获取X坐标
        int  Point::getX()
        {
            return m_x;
        }
        //设置Y坐标
        void  Point::setY(int y)
        {
            m_y = y;
        }
        //获取Y坐标
        int  Point::getY()
        {
            return m_y;
        }

    circle.h

    #pragma once    //防止头文件重复包含
    #include<iostream>
    using namespace std;
    #include"point.h"
    
    
    
    //设置一个圆类Circle
    class Circle
    {
    public:
        //设置半径
        void setR(int r);
        
        //获取半径
        int getR();
        
        //设置圆心
        void setCenter(Point center);
        
        //获取圆心
        Point getCenter();    //m_center是Piont类的数据
        
    
    
    private:
        int m_R;
        //在类中可以让另一个类 作为本类中的成员--与结构体相似
        Point m_center;
    };

    circle.cpp

    #include"circle.h"
    
    
    
        //设置半径
        void Circle::setR(int r)
        {
            m_R = r;
        }
        //获取半径
        int Circle::getR()
        {
            return m_R;
        }
        //设置圆心
        void Circle::setCenter(Point center)
        {
            m_center = center;
        }
        //获取圆心
        Point Circle::getCenter()    //m_center是Piont类的数据
        {
            return m_center;
        }

    test.cpp

    #include <iostream>
    using namespace std;
    #include <string>
    #include"point.h"
    #include"circle.h"
    ////点类
    //class Point
    //{
    //public:
    //    //设置X坐标
    //    void setX(int x)
    //    {
    //        m_x = x;
    //    }
    //    //获取X坐标
    //    int getX()
    //    {
    //        return m_x;
    //    }
    //    //设置Y坐标
    //    void setY(int y)
    //    {
    //        m_y = y;
    //    }
    //    //获取Y坐标
    //    int getY()
    //    {
    //        return m_y;
    //    }
    //
    //
    //private:
    //    int m_x;
    //    int m_y;
    //};
    
    
    //设置一个圆类Circle
    //class Circle
    //{
    //public:
    //    //设置半径
    //    void setR(int r)
    //    {
    //        m_R = r;
    //    }
    //    //获取半径
    //    int getR()
    //    {
    //        return m_R;
    //    }
    //    //设置圆心
    //    void setCenter(Point center)
    //    {
    //        m_center = center;
    //    }
    //    //获取圆心
    //    Point getCenter()    //m_center是Piont类的数据
    //    {
    //        return m_center;
    //    }
    //
    //
    //private:
    //    int m_R;
    //    //在类中可以让另一个类 作为本类中的成员--与结构体相似
    //    Point m_center;
    //};
    
    
    //判断点和圆的关系
    void isInCircle(Circle& c, Point& p)
    {
        if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) == c.getR() * c.getR())
            cout << "点在圆上" << endl;
        else if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) > c.getR() * c.getR())
            cout << "点在圆外" << endl;
        else
            cout << "点在圆内" << endl;
    }
    
    int main()
    {
        //创建并设置点P1
        Point P1;
        P1.setX(10);
        P1.setY(9);
    
        //创建并设置点P2--圆心
        Point P2;
        P2.setX(10);
        P2.setY(0);
    
        //设置圆C1
        Circle C1;
        C1.setR(10);
        C1.setCenter(P2);
    
        isInCircle(C1, P1);
    
        system("pause");
        return 0;
    
    }

    总结:

    分文件时编写类的 .h 文件时:

    1、加 #pragma once  //防止头文件重复包含。

    2、加相关头文件。

    3、仅保留类声明,实现方法去掉。

    编写类的 .cpp文件时:

    1、加入对应的头文件。

    2、只需留下函数的实现即可,注意在函数前需加该函数的作用域。

  • 相关阅读:
    node 使用 ssh2-sftp-client 实现 FTP 的文件上传和下载功能
    gulp 使用 gulp.spritesmith 组件生成雪碧图
    webpack4 打包多页面应用
    javascript 两个变量值的互换
    微信公众号爬坑(react)
    文件上传(H5 + node)
    前后端分离 ajax 跨域 session 传值 (后端使用 node)
    webpack dev 日记
    npm报错 端口被占用 events.js:167 throw er; // Unhandled 'error' event Error: listen EADDRINUSE 127.0.0.1:9999
    多个 img 之间存在间隔
  • 原文地址:https://www.cnblogs.com/keepma/p/15542104.html
Copyright © 2020-2023  润新知