欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。
目录
1、缘起
在 C++ 中,类和对象可以用来构建有趣的应用程序。一个生动形象且吸引人的案例是点和圆的关系。通过创建一个 Point 类 表示点的坐标,以及一个 Circle 类 表示圆的属性和行为,我们可以实现各种有趣的操作,如计算圆的面积、判断点是否在圆内等。这个案例展示了如何利用类和对象的概念在编程中创造出有趣和实用的应用。、
2、分析
设计一个圆类(Circle),和一个点类(Point),计算点和圆的关系。
点和圆关系判断:
点到圆心的距离 == 半径 点在圆上;
点到圆心的距离 > 半径 点在圆外;
点到圆心的距离 < 半径 点在圆内;
点到圆心的距离公式:
3、示例代码 1
#include<iostream>
#include<string>
using namespace std;
//创建一个点类
class Point
{
public:
//行为
//设置 x 坐标
void setX(int x)
{
c_x = x;
}
//设置 y 坐标
void setY(int y)
{
c_y = y;
}
//获取 x 坐标
int getX()
{
return c_x;
}
//获取 y 坐标
int getY()
{
return c_y;
}
private:
int c_x;
int c_y;
};
//创建一个圆类
class Circle
{
public:
//行为
//设置半径
void setR(int r)
{
c_r = r;
}
//设置圆心
void setCenter(Point center)
{
c_center = center;
}
//获取半径
int getR()
{
return c_r;
}
//获取圆心
Point getCenter()
{
return c_center;
}
private:
//圆的半径
int c_r;
//圆的圆心
Point c_center;
};
//全局函数判断点和圆的关系
void isInCircle(Circle& c,Point& p)
{
//计算两点之间的距离 平方
int distance =
(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算半径的平方
int r_distance = c.getR() * c.getR();
if (distance == r_distance)
{
cout << "点在圆上" << endl;
}
if (distance < r_distance)
{
cout << "点在圆内" << endl;
}
if (distance > r_distance)
{
cout << "点在圆外" << endl;
}
}
int main()
{
//创建圆
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
//创建点
Point p;
p.setX(10);
p.setY(10);
//判断点和圆的关系
isInCircle(c, p);
cout << endl;
system("pause");
return 0;
}
4、代码优化
在实际开发中,我们不会把所有的类都写在同一文件中。我们通常会把一个类进行分文件编写。比如在头文件中写声明,在源文件中写实现。
4.1、point.h
#pragma once //防止头文件重复包含
#include<iostream>
using namespace std;
class Point
{
public:
//行为
//设置 x 坐标
void setX(int x);
//设置 y 坐标
void setY(int y);
//获取 x 坐标
int getX();
//获取 y 坐标
int getY();
private:
int c_x;
int c_y;
};
4.2、point.c
#include "point.h"
//设置 x 坐标
void Point::setX(int x)
{
c_x = x;
}
//设置 y 坐标
void Point::setY(int y)
{
c_y = y;
}
//获取 x 坐标
int Point::getX()
{
return c_x;
}
//获取 y 坐标
int Point::getY()
{
return c_y;
}
4.3、circle.h
#pragma once
#include "point.h"
//创建一个圆类
class Circle
{
public:
//行为
//设置半径
void setR(int r);
//设置圆心
void setCenter(Point center);
//获取半径
int getR();
//获取圆心
Point getCenter();
private:
//圆的半径
int c_r;
//在类中可让另一个类作为本来中的成员
Point c_center; //圆心
};
4.4、circle.c
#include "circle.h"
//创建一个圆类
//行为
//设置半径
void Circle::setR(int r)
{
c_r = r;
}
//设置圆心
void Circle::setCenter(Point center)
{
c_center = center;
}
//获取半径
int Circle::getR()
{
return c_r;
}
//获取圆心
Point Circle::getCenter()
{
return c_center;
}
4.4、main.c
#include<iostream>
#include<string>
#include"point.h"
#include"circle.h"
using namespace std;
//全局函数判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
//计算两点之间的距离 平方
int distance =
(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算半径的平方
int r_distance = c.getR() * c.getR();
if (distance == r_distance)
{
cout << "点在圆上" << endl;
}
if (distance < r_distance)
{
cout << "点在圆内" << endl;
}
if (distance > r_distance)
{
cout << "点在圆外" << endl;
}
}
int main()
{
//创建圆
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
//创建点
Point p;
p.setX(10);
p.setY(12);
//判断点和圆的关系
isInCircle(c, p);
cout << endl;
system("pause");
return 0;
}
5、示例代码 2
利用 构造函数 和 初始化列表 的知识点重写上述代码。
#include<iostream>
#include<string>
using namespace std;
#include<iostream>
#include<string>
using namespace std;
//定义一个点类
class Point
{
public:
Point(int x, int y)
{
p_x = x;
p_y = y;
}
//获取 x 的值
int getX()
{
return p_x;
}
//获取 y 的值
int getY()
{
return p_y;
}
private:
int p_x;
int p_y;
};
//定义一个圆类
class Circle
{
public:
Circle(int r,int x, int y):c_r(r),c_center(x,y)
{
}
//设置圆心
void setCenter(Point center)
{
c_center = center;
}
//获取半径
int getR()
{
return c_r;
}
//获取圆心
Point getCenter()
{
return c_center;
}
private:
int c_r;
Point c_center;
};
//全局函数判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
//计算两点之间的距离 平方
int distance =
(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算半径的平方
int r_distance = c.getR() * c.getR();
if (distance == r_distance)
{
cout << "点在圆上" << endl;
}
if (distance < r_distance)
{
cout << "点在圆内" << endl;
}
if (distance > r_distance)
{
cout << "点在圆外" << endl;
}
}
int main()
{
//定义一个圆类
//第一个参数是圆的半径,第二,三个参数是圆心
Circle c(10,10,0);
//创建一个点对象
Point p(10, 10);
isInCircle(c, p);
cout << endl;
system("pause");
return 0;
}
6、总结
本期的分享总结就到这里了,如果有疑问的小伙伴,我们在评论区交流嗷~~~,笔者必回,我们下期再见啦 !!