=============================================================================================
代码分文件编写核心步骤如下:
1、在头文件中进行函数声明、类创建,记得添加#pragma once
防止头文件重复包含;
2、在源文件中进行函数定义,如果是类中的成员函数,那么在函数定义时候需要使用位置解析运算符 ::
,不然编译器会报错;
3、编写main
函数,首先在最开始处添加必要的头文件,只需设置具体的实现功能即可,然后再编写具体的完成功能即可;
以下面案例进行分开讲解:
首先贴出一份完整代码如下:
我们将其称为 【代码1】
#include<iostream>
#include<string>
using namespace std;
//一个点类(Point)
class Point
{
public:
//设置x坐标
void setX(int x)
{
p_x = x;
}
//获取x坐标
int getX()
{
return p_x;
}
//设置y坐标
void setY(int y)
{
p_y = y;
}
//获取y坐标
int getY()
{
return p_y;
}
private:
int p_x;
int p_y;
};
//设计一个圆类Circle
class Circle
{
public:
//设置半径R
void setR(int r)
{
R = r;
}
//获取半径R
int getR()
{
return R;
}
//设置圆心
void setCenter(Point center)
{
c_center = center;
}
//获取圆心
Point getCenter()//c_center是Piont类的数据
{
return c_center;
}
private:
int R;
//在类中可以让另一个类 作为本类中的成员--与结构体相似
Point c_center;
};
//判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) == c.getR() * c.getR())
cout << "点在圆上" << endl;
else if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) > c.getR() * c.getR())
cout << "点在圆外" << endl;
else
cout << "点在圆内" << endl;
}
int main()
{
//创建并设置点P1
Point P1;
P1.setX(10);
P1.setY(9);
//创建并设置点P2--圆心
Point P2;
P2.setX(10);
P2.setY(0);
//设置圆C1
Circle C1;
C1.setR(10);
C1.setCenter(P2);
isInCircle(C1, P1);
system("pause");
return 0;
}
第一步
然后我们将【代码1】中Point类分为一个头文件Point.h
和源文件Point.cpp
:
(1)头文件:Point.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
//一个点类(Point)
class Point
{
public:
//设置x坐标
void setX(int x);
//获取x坐标
int getX();
//设置y坐标
void setY(int y);
//获取y坐标
int getY();
private:
int p_x;
int p_y;
};
//设计一个圆类Circle
(2)源文件 Point.cpp
这里的关键是需要在Point.cpp中包含我们上一步创建的头文件 Point.h【#include"Point.h"
】
#include<iostream>
#include<string>
#include"Point.h"
using namespace std;
//一个点类(Point)
//设置x坐标
void Point::setX(int x)
{
p_x = x;
}
//获取x坐标
int Point::getX()
{
return p_x;
}
//设置y坐标
void Point::setY(int y)
{
p_y = y;
}
//获取y坐标
int Point::getY()
{
return p_y;
}
//设计一个圆类Circle
第二步
Circle类分头文件 Circle.h
和源文件Circle.cpp
编写
(1) Circle.h
代码中需要包含Point.h
,因为Point.h中有我们需要使用的圆心,具体代码如下:
#pragma once
#include<iostream>
#include<string>
using namespace std;
#include "Point.h"
class Circle
{
public:
//设置半径R
void setR(int r);
//获取半径R
int getR();
//设置圆心
void setCenter(Point center);
//获取圆心
Point getCenter();//c_center是Piont类的数据
private:
int R;
//在类中可以让另一个类 作为本类中的成员--与结构体相似
Point c_center;
};
(2)Circle.cpp
需要包含 #include "Circle.h"
#include<iostream>
#include<string>
#include "Circle.h"
using namespace std;
void Circle::setR(int r)
{
R = r;
}
//获取半径R
int Circle::getR()
{
return R;
}
//设置圆心
void Circle::setCenter(Point center)
{
c_center = center;
}
//获取圆心
Point Circle::getCenter()//c_center是Piont类的数据
{
return c_center;
}
3、在主函数中添加头文件 #include "Circle.h"
(此时的Circle.h已经包含了上一步我们创建的Point.h,所以在这里只需添加Cirlcle即可),主函数中代码如下:
#include<iostream>
#include<string>
using namespace std;
#include "Circle.h"
//判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) == c.getR() * c.getR())
cout << "点在圆上" << endl;
else if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) > c.getR() * c.getR())
cout << "点在圆外" << endl;
else
cout << "点在圆内" << endl;
}
int main()
{
//创建并设置点P1
Point P1;
P1.setX(10);
P1.setY(9);
//创建并设置点P2--圆心
Point P2;
P2.setX(10);
P2.setY(0);
//设置圆C1
Circle C1;
C1.setR(10);
C1.setCenter(P2);
isInCircle(C1, P1);
system("pause");
return 0;
}