服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++类和对象深入探索之分文件编写点和圆的关系详解

C++类和对象深入探索之分文件编写点和圆的关系详解

2022-12-05 13:30对象new不出来 C/C++

先前把C++类和对象的封装讲完了,并且留下了一个判断两个立方体是否相等的案例,但是那么多知识点,仅仅一个案例是不够的,所以再来一个分文件编写点圆关系的案例;创建圆类和点类,圆类包含点类,算是一个嵌套吧,顺便

上一篇封装直达

 

创建圆心类

point.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include<iostream>
using namespace std;
//创建圆心类
class Point
{
public:
    void setM_x(int x);
    int  getM_x();
    void setM_y(int y);
    int  getM_y();
private:
    int m_x;
    int m_y;
};

把圆心的横纵坐标设为私有,公共属性写了两对成员方法,用来给圆心属性赋值和读取,这里只写了方法的声明,具体实现将在point.cpp文件实现。

point.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include"point.h"
void Point::setM_x(int x)
{
    m_x = x;
}
int Point::getM_x()
{
    return m_x;
}
void Point::setM_y(int y)
{
    m_y = y;
}
int Point::getM_y()
{
    return m_y;
}

这个文件就是point头文件中定义成员方法的具体实现了,引入point.h头文件,在四个方法的返回值类型和方法名面前加::,表示属于圆心类的方法,然后完成赋值和取值的实现。

 

创建圆类

Circle.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include<iostream>
#include "point.h"
using namespace std;
//创建 Circle 类
class Circle
{
public:
    void  setM_r(int r);
    int   getM_r();
    void  setCenter(Point &center);
    Point getCenter();
private:
    int m_r;
    Point m_center;
};

这里和point.h类似,设置了圆心和圆半径的属性并设置为私有;在公共权限下定义为半径赋值和取值的方法;对于圆心,我引入point.h的头文件,在圆类中创建了圆心m_center,设置圆心方法中采用引用传参,将圆心类完成赋值的圆心传入到圆类中;获取圆心的途径是通过 getCenter 方法调用point 类中的 get 方法。

Circle.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include"Circle.h"
void Circle::setM_r(int r)
{
    m_r = r;
}
int Circle::getM_r()
{
    return m_r;
}
void Circle::setCenter(Point &center)
{
    m_center = center;
}
Point Circle::getCenter()
{
    return m_center;
}

引入Circle.h头文件,将.h的方法完成具体实现。

 

判断点圆关系函数

?
1
2
3
4
5
6
7
8
9
10
11
12
void relative(Circle& c, Point& p)
{
    //圆心到点距离的平方为distance
    int distance =
    (c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) +
    (c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y());
    //半径的平方 rDistance
    int rDistance = c.getM_r() * c.getM_r();
    if (distance > rDistance)       cout << "点在圆外" << endl;
    else if (distance == rDistance) cout << "点在圆上" << endl;
    else                            cout << "点在圆内" << endl;
}

数学上点和圆的关系是圆心到点的距离和半径的比较,这里我把等号两边平方,比较两个数据的大小即可;若距离大于半径,点在圆外;距离等于半径,点在圆上;距离小于半径,点在圆内;relative 函数传入Circle 类和 Point 类的对象,分别计算圆心到点距离的平方 distance和半径的平方 rDistance,利用多重If语句输出不同结果即可。

 

最终实现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include"Circle.h"
void relative(Circle& c, Point& p)
{
    //圆心到点距离的平方为distance
    int distance =
    (c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) +
    (c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y());
    //半径的平方 rDistance
    int rDistance = c.getM_r() * c.getM_r();
    if (distance > rDistance)       cout << "点在圆外" << endl;
    else if (distance == rDistance) cout << "点在圆上" << endl;
    else                            cout << "点在圆内" << endl;
}
int main()
{
    int x = 0, y = 0, a = 0, b = 0, r = 0;
    Circle C;
    Point center, P;
    cout << "圆心横坐标 x 为:"; cin >> x; cout << endl;
    cout << "圆心纵坐标 y 为:"; cin >> y; cout << endl;
    center.setM_x(x);
    center.setM_y (y);
    C.setCenter(center);
    cout << "此圆 半径  r 为:"; cin >> r; cout << endl;
    C.setM_r(r);
    cout << "点横坐标 x 为:"; cin >> a; cout << endl;
    cout << "点纵坐标 y 为:"; cin >> b; cout << endl;
    P.setM_x(a);
    P.setM_y(b);
    relative(C, P);
}

主函数创建Circle类对象 C,和Point 类对象 P,center;通过set方法设置center点的坐标并传入C的setCenter方法中,这样圆心数据赋值完成,然后利用相同方法对圆半径以及点赋值,最后调用relative函数比较即可,附上三种运行结果,如下:

C++类和对象深入探索之分文件编写点和圆的关系详解

C++类和对象深入探索之分文件编写点和圆的关系详解

C++类和对象深入探索之分文件编写点和圆的关系详解

 

总结

这个案例应该是很好理解的,总共是五个文件,两个.h三个.cpp。这样看着非常的舒服和整洁,建议大家在做稍微复杂的项目或者案例时可以多利用分文件编写,那么C++实现点和圆的关系到此结束,期待你的鼓励和支持

到此这篇关于C++类和对象深入探索之分文件编写点和圆的关系详解的文章就介绍到这了,更多相关C++分文件编写内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_58618795/article/details/124801542

延伸 · 阅读

精彩推荐
  • C/C++Matlab实现简易纪念碑谷游戏的示例代码

    Matlab实现简易纪念碑谷游戏的示例代码

    《纪念碑谷》是USTWO公司开发制作的解谜类手机游戏,在游戏中,通过探索隐藏小路、发现视力错觉以及躲避神秘的乌鸦人来帮助沉默公主艾达走出纪念碑...

    slandarer10482022-10-12
  • C/C++详解C++11中模板的优化问题

    详解C++11中模板的优化问题

    这篇文章主要介绍了C++11中模板的优化问题,通过实例代码得出结论,当所有模板参数都有默认参数时,函数模板的调用如同一个普通函数,具体示例代码跟...

    冰糖葫芦很乖8212022-01-11
  • C/C++C语言实现冒泡排序的思路以及过程

    C语言实现冒泡排序的思路以及过程

    冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。本文给大家介绍的非常详细...

    飞人01_0110092022-01-06
  • C/C++C语言 操作符#与##使用方法详解

    C语言 操作符#与##使用方法详解

    在类函数宏中(带参数的宏),#号作为一个预处理运算符,可以把记号转换成字符串。##相当于连接符,它会将两边的内容连接起来,形成新的标识符,下...

    清风自在 流水潺潺9222022-11-11
  • C/C++C++指针学习详解

    C++指针学习详解

    指针在 C\C++ 语言中是很重要的内容,并且和指针有关的内容一向令初学者头大,这篇文章主要给大家介绍了关于C/C++中指针的相关资料,需要的朋友可以参考下...

    TillerB11532022-01-10
  • C/C++C语言中结构体与内存对齐实例解析

    C语言中结构体与内存对齐实例解析

    C语言结构体对齐也是老生常谈的话题了,基本上是面试题的必考题,这篇文章主要给大家介绍了关于C语言中结构体与内存对齐的相关资料,需要的朋友可以参...

    小辜同学5062021-11-30
  • C/C++C语言进阶教程之字符函数&字符串函数

    C语言进阶教程之字符函数&字符串函数

    C语言提供了丰富的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,下面这篇文章主要给大家介绍了关于C语言...

    三分苦6342022-10-17
  • C/C++C++对象与继承使用中一些问题介绍

    C++对象与继承使用中一些问题介绍

    大家好,本篇文章主要讲的是C++对象与继承使用中一些问题介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    IceFlame3111362022-08-05