c++分文件编写,包括头文件和cpp源文件

210 阅读2分钟

**作用:**让代码结构更加清晰

函数分文件编写一般有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 ;
}