如何实现C++中类编写的头文件和源文件的拆分

以实现点和圆位置关系的判断为例

https://www.bilibili.com/video/av41559729?p=105

1. 在头文件中创建.h文件,在源文件中创建.cpp文件
2. 在.h文件中写入

#pragma once
#include<iostream>
using namespace std;

将类复制于.h文件中,删除所有函数的操作,只保留函数声明,并加上分号。
(永远记住头文件只保留函数的声明)

Point.h

#pragma once  // 放置头文件重复包含
#include<iostream>
using namespace std;

// 点类
class Point
{
public:
	// 设置x坐标
	void setX(int x);


	// 获取x坐标
	int getX();


	// 设置y坐标
	void setY(int y);


	// 获取y坐标
	int getY();


private:

	int m_X;
	int m_Y;

};

3.在.cpp中导入刚刚的.h文件

#include "point.h"

然后再把类的代码复制进来,仅仅保留函数的操作,并shift+TAB

point.cpp

#include "point.h"


// 设置x坐标
void Point::setX(int x)
{
	m_X = x;
}

// 获取x坐标
int Point::getX()
{
	return m_X;
}

// 设置y坐标
void Point::setY(int y)
{
	m_Y = y;
}

// 获取y坐标
int Point::getY()
{
	return m_Y;
}

4.制作另一个类的文件拆分

circle.h

#pragma once
#include<iostream>
using namespace std;
#include "point.h"


// 圆类
class Circle
{
public:
	// 设置半径
	void setR(int r);


	// 获取半径
	int getR();


	// 设置圆心
	void setCenter(Point center);


	// 获取圆心
	Point getCenter();


private:
	int m_R;
	int m_X;
	Point m_Center;    // 让另一个类成为本类的成员
};

因为里面用到类Point,所以必须声明

#include "point.h"

之后是

circle.cpp

#include "circle.h"
#include "point.h"

// 设置半径
void Circle::setR(int r)
{
	m_R = r;
}

// 获取半径
int Circle::getR()
{
	return m_R;
}

// 设置圆心
void Circle::setCenter(Point center)
{
	m_Center = center;
}

// 获取圆心
Point Circle::getCenter()
{
	return m_Center;
}

5. 在主文件中声明后调用:

#include<iostream>
using namespace std;
#include "circle.h"
#include "point.h"


// 点和圆的关系
//// 点类
//class Point
//{
//public:
//	// 设置x坐标
//	void setX(int x)
//	{
//		m_X = x;
//	}
//
//	// 获取x坐标
//	int getX()
//	{
//		return m_X;
//	}
//
//	// 设置y坐标
//	void setY(int y)
//	{
//		m_Y = y;
//	}
//
//	// 获取y坐标
//	int getY()
//	{
//		return m_Y;
//	}
//	
//private:
//
//	int m_X;
//	int m_Y;
//
//};




//
//// 圆类
//class Circle
//{
//public:
//	// 设置半径
//	void setR(int r)
//	{
//		m_R = r;
//	}
//
//	// 获取半径
//	int getR()
//	{
//		return m_R;
//	}
//
//	// 设置圆心
//	void setCenter(Point center)
//	{
//		m_Center = center;
//	}
//
//	// 获取圆心
//	Point getCenter()
//	{
//		return m_Center;
//	}
//
//
//private:
//	int m_R;
//	int m_X;
//	Point m_Center;    // 让另一个类成为本类的成员
//};

// 判断点和圆的关系的函数
void isinCircle(Circle &c, Point &p)
{
	// 计算两点之间距离的平方
	int d1 = pow(c.getCenter().getX()-p.getX(), 2) + pow(c.getCenter().getY()-p.getY(), 2);

	// 计算半径的平方
	int d2 = pow(c.getR(), 2);

	// 判断关系
	if (d1 == d2)
	{
		cout << "点在圆上" << endl;
	}
	else if (d1 > d2)
	{
		cout << "点在圆外" << endl;
	}
	else
	{
		cout << "点在圆内" << endl;
	}

}




int main()	//注意一个项目中main函数不能重名
{

	// 创建圆
	Circle c;
	c.setR(10);
	Point center;
	center.setX(10);
	center.setY(0);
	c.setCenter(center);

	// 创建点
	Point p;
	p.setX(10);
	p.setY(101);

	// 判断关系
	isinCircle(c, p);

	system("pause");

	return 0;

}```

发布了103 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44684139/article/details/104238183
今日推荐