关于类和对象的分文件编写----点圆判断实例
创始人
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;
}

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

结语

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

相关内容

热门资讯

深圳海关“政策+科技”双支撑 ... 当前,全球贸易形势复杂多变,作为外贸大省的重要窗口,深圳海关积极作为,以智慧监管为抓手,以精准服务为...
京东外卖将扩招至15万名全职骑... |2025年6月3日 星期二| NO.1京东外卖:近期将扩招至15万名全职骑手 6月1日,京东外卖宣...
免关税政策即将到期 欧盟将与乌... 欧盟委员会发言人奥洛夫·吉尔2日表示,欧盟当前针对乌克兰的免关税政策将于6月5日到期,欧盟正在着手制...
鲍威尔出席美联储国际金融司活动... 美联储主席鲍威尔(Jerome Powell)周一在美联储国际金融司(IF)成立75周年活动上发表讲...
关税政策推进受阻,特朗普政府求... 6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法”的命令...
关税政策推进受阻 特朗普政府求... 当地时间6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法...
英国央行Catherine M... 英国央行Catherine Mann:必须考虑量化紧缩(QT)和一系列利率政策的影响。
原创 香... 在新加坡香格里拉酒店举行的亚太安全论坛上,美国国防部长赫格塞思(Lloyd Austin)于5月31...
美方掐断C919发动机技术,中... 在国际舞台上,当两大经济体相遇,总会引发一场关于技术、资本和市场的角力。最近,中美之间的博弈又一次走...
6800万镑!埃泽“豪言”震惊... 足坛风云变幻,总有那么些球员,他们的名字与豪门绯闻紧密相连,每一次表态都能在转会市场上掀起波澜。这不...