案例描述:点和圆的关系
设计一个圆类(Circle),和一个点类(Point),计算点和圆的关系
#include <iostream>
using namespace std;
//点类
class Point
{
public:
//设置X
void setX(int x)
{
X = x;
}
//获取X
int getX()
{
return X;
}
//设置Y
void setY(int y)
{
Y = y;
}
//获取Y
int getY()
{
return Y;
}
private:
int X;
int Y;
};
//圆类
class Circle
{
public:
//设置半径
void setR(int r)
{
R = r;
}
//获取半径
int getR()
{
return R;
}
//设置圆心
void setCenter(Point center)
{
Center = center;
}
//获取圆心
Point getCenter()
{
return Center;
}
private:
int R;//半径
//在类中可以让另一个类,作为本类的成员
Point Center;//圆心
};
//判断 点和圆的关系
void Relationship(Circle& c, Point& p)
{
//计算两点之间距离的平方
int s = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算半径的平方
int l = c.getR() * c.getR();
//判断关系
if (s == l)
{
cout << "点在圆上" << endl;
}
if (s < l)
{
cout << "点在圆内" << endl;
}
if (s > l)
{
cout << "点在圆外" << endl;
}
}
int main() {
//创建圆
//假设圆心在圆的最左端
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
//创建点
Point p1;
p1.setX(10);
p1.setY(10);
Point p2;
p2.setX(10);
p2.setY(11);
Point p3;
p3.setX(10);
p3.setY(9);
//判断关系
Relationship(c, p1);
Relationship(c, p2);
Relationship(c, p3);
system("pause");
return 0;
}
点在圆上
点在圆外
点在圆内
通过上述代码可以看出将所有文件写在一起会显得及其杂乱,不利于后期编写
因此我们可以分文件写:
在circle.h中:
#pragma once
#include<iostream>
using namespace std;
#include"point.h"
//圆类
class Circle
{
public:
//设置半径
void setR(int r);
//获取半径
int getR();
//设置圆心
void setCenter(Point center);
//获取圆心
Point getCenter();
private:
int R;//半径
//在类中可以让另一个类,作为本类的成员
Point Center;//圆心
};
在circle.cpp中:
#include"circle.h"
//圆类
//设置半径
void Circle::setR(int r)
{
R = r;
}
//获取半径
int Circle::getR()
{
return R;
}
//设置圆心
void Circle::setCenter(Point center)
{
Center = center;
}
//获取圆心
Point Circle::getCenter()
{
return Center;
}
在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 X;
int Y;
};
在point.cpp中:
#include"point.h"
//设置X
void Point::setX(int x)
{
X = x;
}
//获取X
int Point::getX()
{
return X;
}
//设置Y
void Point::setY(int y)
{
Y = y;
}
//获取Y
int Point::getY()
{
return Y;
}
在dn.cpp中:
#include <iostream>
using namespace std;
#include"circle.h"
#include"point.h"
//判断 点和圆的关系
void Relationship(Circle& c, Point& p)
{
//计算两点之间距离的平方
int s = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算半径的平方
int l = c.getR() * c.getR();
//判断关系
if (s == l)
{
cout << "点在圆上" << endl;
}
if (s < l)
{
cout << "点在圆内" << endl;
}
if (s > l)
{
cout << "点在圆外" << endl;
}
}
int main() {
//创建圆
//假设圆心在圆的最左端
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
//创建点
Point p1;
p1.setX(10);
p1.setY(10);
Point p2;
p2.setX(10);
p2.setY(11);
Point p3;
p3.setX(10);
p3.setY(9);
//判断关系
Relationship(c, p1);
Relationship(c, p2);
Relationship(c, p3);
system("pause");
return 0;
}
从上述代码可以看出,分文件编写会显得有条理些,代码更加清晰直观