练习2-点和圆的关系

01-4-2 练习2-点和圆的关系

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

#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Circle
{
private:
    double c_m_x;
    double c_m_y;
    double c_m_r;
public:
    double getcx()
    {
        return c_m_x;
    }
    double getcy()
    {
        return c_m_y;
    }
    double getcr()
    {
        return c_m_r;
    }
    void setcx(double x)
    {
        c_m_x = x;
    }
    void setcy(double y)
    {
        c_m_y = y;
    }
    void setcr(double r)
    {
        c_m_r = r;
    }
};
class Point
{
private:
    double p_m_x;
    double p_m_y;
public:
    double getpx()
    {
        return p_m_x;
    }
    double getpy()
    {
        return p_m_y;
    }
    void setpx(double x)
    {
        p_m_x = x;
    }
    void setpy(double y)
    {
        p_m_y = y;
    }
};
int dis(class Circle& c, class Point& p)
{
    double dis = sqrt((c.getcx() - p.getpx()) * (c.getcx() - p.getpx()) + (c.getcy() - p.getpy()));
    if (dis < c.getcr())
    {
        return 0;
    }
    else if (dis == c.getcr())
    {
        return 1;
    }
    return 2;
}
void main()
{
    class Circle c1;
    class Point p1;
    c1.setcx(1.0);
    c1.setcy(1.0);
    c1.setcr(1.0);
    p1.setpx(1.0);
    p1.setpy(1.0);
    int ret = dis(c1, p1);
    switch (ret)
    {
    case 0:
        cout << "点在圆内" << endl;
        break;
    case 1:
        cout << "点在圆上" << endl;
        break;
    case 2:
        cout << "点在圆外" << endl;
        break;
    }
    return;
}

但是,在大型文件里面不允许这样的写法:因为所有的函数、类都在一个文件里面。所以我们要拆开,封装成一个一个小模块。

这里需要函数的分文件编写的知识。复习一下:

函数分文件的编写一般有 4 个步骤:

  1. 创建后缀名为.h 的头文件
  2. 创建后缀名为.cpp 的源文件
  3. 在头文件里面写函数的声明
  4. 在源文件里面写函数的定义

在这个点和圆的里面,就应该是这样的:

头文件
- circle.h
- dis.h
- point.h
源文件
- circle.cpp
- dis.cpp
- main.cpp
- point.cpp
  1. 头文件:circle.h

    #pragma once
    #include 
    using namespace std;
    class Circle
    {
    private:
    double c_m_x;
    double c_m_y;
    double c_m_r;
    public:
    double getcx();
    double getcy();
    double getcr();
    void setcx(double x);
    void setcy(double y);
    void setcr(double r);
    };
  2. 头文件:dis.h

    #pragma once
    #include 
    using namespace std;
    int dis(class Circle& c, class Point& p);
  3. 头文件:point.h

    #pragma once
    #include 
    using namespace std;
    class Point
    {
    private:
    double p_m_x;
    double p_m_y;
    public:
    double getpx();
    double getpy();
    void setpx(double x);
    void setpy(double y);
    };
  4. 源文件:circle.cpp

    #include "circle.h"
    #include 
    using namespace std;
    double Circle::getcx()
    {
    return c_m_x;
    }
    double Circle::getcy()
    {
    return c_m_y;
    }
    double Circle::getcr()
    {
    return c_m_r;
    }
    void Circle::setcx(double x)
    {
    c_m_x = x;
    }
    void Circle::setcy(double y)
    {
    c_m_y = y;
    }
    void Circle::setcr(double r)
    {
    c_m_r = r;
    }
  5. 源文件:dis.cpp

    #include "circle.h"
    #include "point.h"
    #include "dis.h"
    #include 
    #include 
    using namespace std;
    int dis(class Circle& c, class Point& p)
    {
    double dis = sqrt((c.getcx() - p.getpx()) * (c.getcx() - p.getpx()) + (c.getcy() - p.getpy()));
    if (dis < c.getcr())
    {
        return 0;
    }
    else if (dis == c.getcr())
    {
        return 1;
    }
    return 2;
    }
  6. 源文件:main.cpp

    #include "circle.h"
    #include "point.h"
    #include "dis.h"
    #include 
    #include 
    #include 
    using namespace std;
    void main()
    {
    class Circle c1;
    class Point p1;
    c1.setcx(1.0);
    c1.setcy(1.0);
    c1.setcr(1.0);
    p1.setpx(1.0);
    p1.setpy(1.0);
    int ret = dis(c1, p1);
    switch (ret)
    {
    case 0:
        cout << "点在圆内" << endl;
        break;
    case 1:
        cout << "点在圆上" << endl;
        break;
    case 2:
        cout << "点在圆外" << endl;
        break;
    }
    return;
    }
  7. 源文件:point.cpp

    #include "point.h"
    #include 
    using namespace std;
    double Point::getpx()
    {
    return p_m_x;
    }
    double Point::getpy()
    {
    return p_m_y;
    }
    void Point::setpx(double x)
    {
    p_m_x = x;
    }
    void Point::setpy(double y)
    {
    p_m_y = y;
    }

这样我们就成功把文件拆开了!!!

头文件中的#pragma once是为了防止出现重复的头文件。

在头文件中,只要函数的声明。定义全部在源文件。

在源文件要包含头文件。然后需要注意作用域,比如:double Point::getpy()(文件:point.cpp)。这里的Point::就是作用域。如果不写,则表示这个函数在全局函数。加上了作用域就变成了成员函数。

文章「练习2-点和圆的关系」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/856」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇