一、实验目的
创建圆类和点类,实例化后,判断两者之间关系
使用到类的封装,以及多文件等知识点
二、整体代码
在程序入库.cpp文件中,将整体代码实现
1、点类
class Point
{
public:
void setpoint(int L, int R) //提供公共接口操纵属性
{
pointL = L;
pointR = R;
}
int getPointL()
{
return pointL;
}
int getPointR()
{
return pointR;
}
private: //属性成员必须 是private
int pointL;
int pointR;
};
2、圆类
class Circle
{
public:
void setCenter(Point cen)
{
center = cen;
}
Point getCenter()
{
return center;
}
void setRadius(int side)
{
radius = side;
}
int getRadius()
{
return radius;
}
private:
Point center; //类也可以作为成员变量
int radius;
};
3、公共函数
void isInCircle(Circle c, Point p)
{
double distance = (pow(c.getCenter().getPointL() - p.getPointL(), 2) + pow(c.getCenter().getPointR() - p.getPointR(), 2));
int d_radius = c.getRadius() * c.getRadius();
cout << " distance = " << distance << endl;
cout << " d_radius = " << d_radius << endl;
if (distance< d_radius)
{
cout << "圆内" << endl;
}
else if (distance == d_radius)
{
cout << "圆上" << endl;
}
else
cout << "圆外" << endl;
}
4、主函数入口
int main()
{
//create class Circle instance
Point center;
center.setpoint(1, 1);
Circle cir;
cir.setCenter(center);
cir.setRadius(1);
//create class Point p
Point p;
p.setpoint(0, 0);
isInCircle(cir, p);
system("pause");
return 0;
}
三、分为多个文件
1、新建 point.h 头文件,类的声明放入
#pragma once //防止头文件重复包含
#include<iostream>
using namespace std;
class Point
{
public:
void setpoint(int L, int R); //具体实现删除,只需要声明即可
int getPointL();
int getPointR();
private:
int pointL;
int pointR;
};
2、新建 point.cpp 头文件,放入类的具体实现
文件开头写上引用的头文件,函数名前加上作用域 Point::
#include "point.h"
void Point::setpoint(int L, int R) //函数名之前加上作用域
{
pointL = L;
pointR = R;
}
int Point::getPointL()
{
return pointL;
}
int Point::getPointR()
{
return pointR;
}
3、新建circle.h头文件,放入类的声明
因为函数声明里含有Point,所以在文件开头,要写上 #include "point.h"
#pragma once
#include<iostream>
#include "point.h"
using namespace std;
class Circle
{
public:
void setCenter(Point cen);
Point getCenter();
void setRadius(int side);
int getRadius();
private:
Point center;
int radius;
};
4、新建circle.cpp文件,放入圆类的具体实现
注意引入头文件,以及函数名前加上作用域
#include "circle.h"
void Circle::setCenter(Point cen)
{
center = cen;
}
Point Circle::getCenter()
{
return center;
}
void Circle::setRadius(int side)
{
radius = side;
}
int Circle::getRadius()
{
return radius;
}
5、修改主函数文件
关于类的定义都已经移除,只剩下公共函数以及 int main()函数入口
要在文件开头出加上 #include "circle.h"
#include "point.h"
#include<iostream>
#include<string>
using namespace std;
#include "circle.h"
#include "point.h"
//@file : 02 Circle and Point
//@author : wang
//@date : 2021/3/22 21:22:02
//@brief : create circle class and point class,detemine the relationship between circle and point
void isInCircle(Circle c, Point p)
{
double distance = (pow(c.getCenter().getPointL() - p.getPointL(), 2) + pow(c.getCenter().getPointR() - p.getPointR(), 2));
int d_radius = c.getRadius() * c.getRadius();
cout << " distance = " << distance << endl;
cout << " d_radius = " << d_radius << endl;
if (distance< d_radius)
{
cout << "圆内" << endl;
}
else if (distance == d_radius)
{
cout << "圆上" << endl;
}
else
cout << "圆外" << endl;
}
int main()
{
//create class Circle instance
Point center;
center.setpoint(1, 1);
Circle cir;
cir.setCenter(center);
cir.setRadius(1);
//create class Point p
Point p;
p.setpoint(0, 0);
isInCircle(cir, p);
system("pause");
return 0;
}