关于类和对象的分文件编写----点圆判断实例
创始人
2025-06-01 16:02:16
0

1.简介

本文通过一个判断点和圆位置关系的实例,来记录C++中类和对象分文件编写的过程。

2.分文件前代码

#include
using namespace std;
//点和圆的关系//点类
class Point {
private:int d_x; // 横坐标int d_y;// 纵坐标
public:void setLocation(int x,int y) {  //设置坐标d_x = x;d_y = y;}int getDx() {return d_x;}int getDy() {return d_y;}};//圆类
class Circle {
public:void setR(int r)  //设置半径{Y_r = r;}void setPoint(Point p)//设置圆心{o = p;}Point getPoint() //读取圆心{return o;}int getR() //读取半径{return Y_r;}private://在类中可以让另一个类作为本类做的一个成员Point o;int Y_r;//半径
};void judge(Circle& C,Point &P)
{int m = (P.getDx() - C.getPoint().getDx()) * (P.getDx() - C.getPoint().getDx()) + (P.getDy() - C.getPoint().getDy()) * (P.getDy() - C.getPoint().getDy());int r = C.getR() * C.getR();if (m > r){cout << "点在圆外!" << endl;}else if (m == r) {cout << "点在圆上!" << endl;}else{cout << "点在圆内!" << endl;}}
int main()
{Circle C1;Point center;//定义圆心,不然point类没办法对private里的o进行操作!!!!center.setLocation(0, 0);C1.setPoint(center);C1.setR(2);Point p1;p1.setLocation(2, 5);Point p2;p2.setLocation(1, 1);Point p3;p3.setLocation(0, -2);cout << "p1:" << endl;judge(C1,p1);cout << "p2:" << endl;judge(C1,p2);cout << "p3:" << endl;judge(C1,p3);system("pause");return 0;
}

这个代码由于在主函数前既定义了一个判断函数,还定义了两个类,显得有些杂乱,因此我们需要进行分文件编写来美化我们的代码。

3.分文件编写步骤

类和对象分文件编写其实和函数的分文件编写类似

1)先创建一个后缀名为.h的头文件

2)再创建一个.cpp为后缀名的源文件

3)在头文件中写声明

4)在源文件中写定义

具体可以参考这篇关于函数的分文件编写

4.分文件编写实现

1)文件列表

创建如下文件列表存放类和函数
在这里插入图片描述

2)point.h(点类头文件)

#pragma once
#include
using namespace std;
//点类
class Point {
private:int d_x; // 横坐标int d_y;// 纵坐标
public:void setLocation(int x, int y);  //设置坐标int getDx();int getDy();};

在头文件中写 Point类的 声明,删去原来定义的内容。

其中 # pragma once 代表让编译器只运行一次,防止重复运行。

3)point.cpp(点类源文件)

#include"point.h"
//因为下面的函数都是成员函数,所以需要告诉编译器实在point作用域下的成员函数void Point::setLocation(int x, int y) {  //设置坐标d_x = x;d_y = y;
}
int Point::getDx() {return d_x;
}int Point::getDy() {return d_y;
}

源文件中写类的定义函数

void Point::setLocation(int x, int y) 中的 Point:: 是为了告诉编译器这是在Point作用域下的成员函数,后面的成员函数定义也是这样。

4)circle.h(圆头文件)

#pragma once
#include
#include"point.h"  //在圆类中有点类的调用,因此要在圆类的头文件中引用点类的头文件
using namespace std;
class Circle {
public:void setR(int r);  //设置半径void setPoint(Point p);//设置圆心Point getPoint();//读取圆心int getR(); //读取半径private://在类中可以让另一个类作为本类做的一个成员Point o;int Y_r;//半径
};

和点类头文件一样,做圆类的声明,但是在圆类中运用了点类作为其函数成员,因此在头文件中要引用点类的头文件

5)circle.cpp

#include"circle.h"void Circle::setR(int r)  //设置半径
{Y_r = r;
}void Circle::setPoint(Point p)//设置圆心
{o = p;
}Point Circle::getPoint() //读取圆心
{return o;
}int Circle::getR() //读取半径
{return Y_r;
}

和点类一样,在源文件中定义了圆类的成员函数

6)judge.h(judge函数的头文件)

函数的分文件编写和类的类似,都是在头文件中写定义,在源文件中写声明。

#pragma once
#include
#include"circle.h"
#include"point.h"
using namespace std;
void judge(Circle& C, Point& P);

由于其这个函数引用了圆类和点类,要在函数的头文件中对圆类和点类做一个声明。

7)judge.cpp(judge函数的源文件)

#include"judge.h"
void judge(Circle& C, Point& P)
{int m = (P.getDx() - C.getPoint().getDx()) * (P.getDx() - C.getPoint().getDx()) + (P.getDy() - C.getPoint().getDy()) * (P.getDy() - C.getPoint().getDy());int r = C.getR() * C.getR();if (m > r){cout << "点在圆外!" << endl;}else if (m == r) {cout << "点在圆上!" << endl;}else{cout << "点在圆内!" << endl;}}

源文件中写 judge函数的定义。

8)主函数

#include
#include"circle.h"
#include"point.h"
#include"judge.h"
using namespace std;int main()
{Circle C1;Point center;//定义圆心,不然point类没办法对private里的o进行操作!!!!center.setLocation(0, 0);C1.setPoint(center);C1.setR(2);Point p1;p1.setLocation(2, 5);Point p2;p2.setLocation(1, 1);Point p3;p3.setLocation(0, -2);cout << "p1:" << endl;judge(C1,p1);cout << "p2:" << endl;judge(C1,p2);cout << "p3:" << endl;judge(C1,p3);system("pause");return 0;
}

主函数中只要引入要用到的类和函数的头文件即可实现其功能。

结语

通过类和对象的分文件编写,可以将一堆杂乱的代码分成数个简单的代码文件,使代码更具有可读性。

相关内容

热门资讯

家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...
中国军视网:日本妄言击沉福建舰... 本文转自【中国军视网】; 日本首相高市早苗发表涉台错误言论,公然挑战一个中国原则,甚至还有日本无知政...
重磅!东莞长安50万㎡产城发布... 在当下竞争激烈的市场环境中,中小企业如何突破成本压力,找到一片既能扎根成长又能眺望未来的理想栖息地?...
毕马威:政策、资本等多维着力 ... 由毕马威联合长三角G60科创走廊创新研究中心主办的“长三角高端装备新质领袖榜单发布仪式”于11月21...
河曲县开展驻村帮扶工作政策业务... 来源:河曲县融媒体中心 近日,我县组织开展驻村帮扶工作政策业务集中培训,进一步提升驻村帮扶干部...
羽绒服涨价与猪肉降价有关?经济... 中央气象台发布统计信息,14日至17日,我国今年下半年首轮大范围寒潮天气即将自西向东影响我国,多地降...
周勇,任上落马 11月21日,中央纪委国家监委网站发布通报: 国家能源集团乌海能源党委书记、董事长周勇涉嫌严重违纪违...