前言
类的分文件编写是一种常用的软件开发技术,特别适用于大型项目。本文将介绍如何以C++为例进行类的分文件编写,以提高代码的可维护性和可扩展性。
在软件开发中,良好的代码组织和结构是至关重要的。当项目变得庞大复杂时,一个文件中堆积的代码会显得不够清晰和易于维护。这时,将代码按照功能和责任进行分文件编写是一个很好的选择。
下面以C++为例,介绍类的分文件编写的方法。
一、没分文件之前的代码展示:
这是一个创建了Circle类和Point类并判断电鱼元的关系的实例:
#include<iostream>
using namespace std;
class Point
{
private:
double p_x;
double p_y;
public:
void setPoint(double x, double y) {
p_x = x;
p_y = y;
}
double getx()
{
return p_x;
}
double gety()
{
return p_y;
}
};
class Circle
{
private:
int r;
Point op;
public:
void setr(int tr)
{
r = tr;
}
void setop(double x, double y)
{
op.setPoint(x, y);
}
int getr() {
return r;
}
double getop_x() {
return op.getx();
}
double getop_y() {
return op.gety();
}
};
void JudgePosition(Circle c, Point p) {
double distance = (c.getop_x() - p.getx()) * (c.getop_x() - p.getx()) +
(c.getop_y() - p.gety()) * (c.getop_y() - p.gety());
double r2 = c.getr() * c.getr();
if (distance > r2)
cout << "点在圆外" << endl;
if (distance < r2)
cout << "点在圆内" << endl;
if (distance == r2)
cout << "点在圆上" << endl;
}
int main() {
Circle c1;
c1.setr(10);
c1.setop(10,10);
Point p1;
p1.setPoint(10,0);
JudgePosition(c1, p1);
}
二、分文件编写步骤:
在C++中,一个类的定义通常需要分为两个文件:头文件(.h或.hpp)和源文件(.cpp)。
1.头文件的编写:
头文件包含类的声明和公共接口,它描述了类的成员变量和成员函数,并提供了其他文件使用该类的必要信息。头文件通常具有以下结构:
- Point.h:
#pragma once//防止头文件重复包含
class Point
{
private:
double p_x;
double p_y;
public:
void setPoint(double x, double y);
double getx();
double gety();
};
- Circle.h:
#pragma once// 防止头文件重复包含
#include"Point.h"
class Circle
{
private:
int r;
Point op;
public:
void setr(int tr);
void setop(double x, double y);
int getr();
double getop_x();
double getop_y();
};
2.源文件的编写:
源文件包含类成员函数的具体实现。它可以包含类的私有成员变量,以及实现类的构造函数、析构函数和其他成员函数等。源文件的命名通常与头文件相同,但使用.cpp作为文件扩展名。注意引用头文件。
注意:需要告诉编译器这些函数是在某对象的作用域下:
函数类型 类名:: 函数名()
{
…
}
- Point.h:
#include"Point.h"
void Point::setPoint(double x, double y) {
p_x = x;
p_y = y;
}
double Point::getx()
{
return p_x;
}
double Point::gety()
{
return p_y;
}
- Circle.h:
#include"Circle.h"
void Circle::setr(int tr)
{
r = tr;
}
void Circle::setop(double x, double y)
{
op.setPoint(x, y);
}
int Circle::getr() {
return r;
}
double Circle::getop_x() {
return op.getx();
}
double Circle::getop_y() {
return op.gety();
}
3.主入口文件的编写:
#include<iostream>
using namespace std;
#include"Circle.h"
#include"Point.h"
void JudgePosition(Circle c, Point p) {
double distance = (c.getop_x() - p.getx()) * (c.getop_x() - p.getx()) +
(c.getop_y() - p.gety()) * (c.getop_y() - p.gety());
double r2 = c.getr() * c.getr();
if (distance > r2)
cout << "点在圆外" << endl;
if (distance < r2)
cout << "点在圆内" << endl;
if (distance == r2)
cout << "点在圆上" << endl;
}
int main() {
Circle c1;
c1.setr(10);
c1.setop(10,10);
Point p1;
p1.setPoint(10,20);
JudgePosition(c1, p1);
}
总结:
类的分文件编写是一种常用的软件开发技术,适用于提高代码的可维护性和可扩展性。通过将类的声明和定义分别放在头文件和源文件中,我们可以更好地组织和管理代码。在实际开发中,合理使用类的分文件编写方法,将能让代码更加清晰、易于维护和扩展。