**作用:**让代码结构更加清晰
函数分文件编写一般有4个步骤
1.创建后缀名为.h的头文件
2.创建后缀名为.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
示例:
在头文件中写函数的声明
//swap.h文件
#include<iostream>
using namespace std;
//实现两个数字交换的函数声明
void swap(int a, int b);
在源文件中写函数的定义
//swap.cpp文件
#include "swap.h"
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
引用函数
//main函数文件
#include "swap.h"
int main() {
int a = 100;
int b = 200;
swap(a, b);
system("pause");
return 0;
}
对于一段包含类的代码,进行分文件编写
#include<iostream>
using namespace std;
class Point {
public:
// 设置x坐标
void setX(int x ) {
m_x = x;
}
//设置y坐标
void setY(int y) {
m_y = y;
}
// 得到x坐标
int getX() {
return m_x;
}
//得到y坐标
int getY() {
return m_y;
}
private :
int m_x, m_y;
};
class Circle {
public:
//设置半径
void setR(int r) {
m_r = r;
}
//获取半径
int getR() {
return m_r;
}
//设置圆心
void setPoint(Point center) {
m_Center = center;
}
//获取圆心
Point getCenter() {
return m_Center;
}
private :
int m_r;//半径
Point m_Center; // 圆心
};
//判断点和圆之间的距离
void inInCircle(Circle &c, Point &p) {
// 计算两点之间的距离
int PointInstance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算R^2
int r2 = c.getR()* c.getR();
//判断关系
// 圆外
if (PointInstance > r2) {
cout << "点在圆外" << endl;
}
else if (PointInstance == r2) {
cout << "点在圆上" << endl;
}
else {
cout << "点在园内" << endl;
}
}
void test() {
Point center,p;
center.setX(10);
center.setY(10);
Circle c;
c.setR(50);
c.setPoint(center);
p.setX(10);
p.setY(10);
inInCircle(c, p);
}
int main() {
test();
system("pause");
return 0 ;
}
将point类和circle类分别写文件保存,然后通过头文件引用。
-----main.cpp
—circle.cpp
—circle.h
—point.cpp
—point.h
则circle.h内容,只需要类的声明和成员函数、变量的声明,具体函数实现在cpp文件中
#pragma once
#include "point.h"
class Circle {
public:
//设置半径
void setR(int r);
//获取半径
int getR();
//设置圆心
void setPoint(Point center);
//获取圆心
Point getCenter();
private :
int m_r;//半径
Point m_Center; // 圆心
};
circle.cpp内容,在Circle作用域下的函数实现
#include "circle.h"
//设置半径
void Circle::setR(int r) {
m_r = r;
}
//获取半径
int Circle::getR() {
return m_r;
}
//设置圆心
void Circle::setPoint(Point center) {
m_Center = center;
}
//获取圆心
Point Circle::getCenter() {
return m_Center;
}
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 m_x, m_y;
};
point.cpp内容
#include "point.h"
// 设置x坐标
void Point::setX(int x ) {
m_x = x;
}
//设置y坐标
void Point::setY(int y) {
m_y = y;
}
// 得到x坐标
int Point::getX() {
return m_x;
}
//得到y坐标
int Point::getY() {
return m_y;
}
因为Circle类中使用了point类,所以需要在circle.h头文件中引用point.h头文件
main文件内容
#include<iostream>
using namespace std;
#include"point.h"
#include"circle.h"
//判断点和圆之间的距离
void inInCircle(Circle &c, Point &p) {
// 计算两点之间的距离
int PointInstance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//计算R^2
int r2 = c.getR()* c.getR();
//判断关系
// 圆外
if (PointInstance > r2) {
cout << "点在圆外" << endl;
}
else if (PointInstance == r2) {
cout << "点在圆上" << endl;
}
else {
cout << "点在园内" << endl;
}
}
void test() {
Point center,p;
center.setX(10);
center.setY(10);
Circle c;
c.setR(50);
c.setPoint(center);
p.setX(10);
p.setY(10);
inInCircle(c, p);
}
int main() {
test();
system("pause");
return 0 ;
}