C++中头文件(.h)和源文件(.cpp)都应该写些什么
2016-04-12 11:31
429 查看
头文件(.h):
写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#ifndef CIRCLE_H
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#define CIRCLE_H
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//你的代码写在这里
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#endif
这样做是为了防止重复编译,不这样做就有可能出错。
至于CIRCLE_H这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。
源文件(.cpp):
源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。
下面举个最简单的例子来描述一下,咱就求个圆面积。
第1步,建立一个空工程(以在VS2003环境下为例)。
第2步,在头文件的文件夹里新建一个名为Circle.h的头文件,它的内容如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#ifndef CIRCLE_H
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#define CIRCLE_H
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
class Circle
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
private:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
double r;//半径
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
public:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
Circle();//构造函数
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
Circle(double R);//构造函数
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
double Area();//求面积函数
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#endif
注意到开头结尾的预编译语句。在头文件里,并不写出函数的具体实现。
第3步,要给出Circle类的具体实现,因此,在源文件夹里新建一个Circle.cpp的文件,它的内容如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include "Circle.h"
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Circle::Circle()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this->r=5.0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Circle::Circle(double R)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this->r=R;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
double Circle:: Area()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
return 3.14*r*r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
需要注意的是:开头处包含了Circle.h,事实上,只要此cpp文件用到的文件,都要包含进来!这个文件的名字其实不一定要叫Circle.cpp,但非常建议cpp文件与头文件相对应。
最后,我们建一个main.cpp来测试我们写的Circle类,它的内容如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include <iostream>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include "Circle.h"
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
using namespace std;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
int main()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
Circle c(3);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
cout<<"Area="<<c.Area()<<endl;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
return 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
注意到开头时有#include "Circle.h"的声明,证明我们使用到了我们刚才写的Circle类。
至此,我们工程的结构为:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/lyanliu/Magical%20Snap%20-%202008.03.19%2002.06%20-%20003.png)
运行一下,输出结果为:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/lyanliu/Magical%20Snap%20-%202008.03.19%2002.04%20-%20002.png)
说明我们写的Circle类确实可以用了。
相关文章推荐
- cpp之间函数引用和类引用的方法
- C语言第十三篇:简单文字处理
- c++中随机函数rand()和srand()的用法
- C++中随机函数rand()和srand()的用法
- c++ 重载、覆盖、隐藏
- C++ primer 第四章--数组和指针
- C++中堆和栈
- [C++] C++的运算符重载(+、-、前置--、后置--,前置++,后置++、==)
- Leetcode 1. Two Sum
- VC++USB及串口通信程序(附工程)
- C++函数声明和定义
- 深拷贝与浅拷贝
- C语言-队列
- C++封装继承多态总结(转)
- c语言实现输出一个数的每一位
- c++11多线程学习
- C++ 向量 Vector 高级数组(三~二)
- VC++串口通信编程详解
- c++全局变量的正确声明
- 《More Effective C++》 Item M2:尽量使用C++风格的类型转换