C++中的头文件(.h)和源文件(.cpp)都应该写什么?

头文件(.h):写定义和声明
写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但是一般来说不写具体的实现。
注意:

1、在写头文件的时候需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):

#ifndef PERSON_H
#define PERSON_H

//中间写你的代码

#endif

这样做是为了防止重复编译,不这样做就有可能会出错。

最新用法:今天新版本的GCC编译器中,仅使用下面的一句宏即可:
#pragma once


关于#ifndef RANDNAME的另类用法:

#ifndef RANDNAME
something you write here.
......
#endif

上面这是一对条件编译指令,不仅可以向上面那样防止声明重复,还可以将测试与实际发行版本的代码的编译有机分开,几乎毫不费力。比如说,我在测试的时候想加一些内容,但是在实际的发行版本中并不像加这部分内容,就可以用条件编译指令‘

  • 测试阶段
// 某某库文件.cpp
// 测试阶段,在该文件想加一些内容
// 被添加的部分内容包裹在条件编译指令中即可
#ifndef RANDNAME
测试阶段你要添加的内容.........
.................
#endif
  • 发行版本
    • 添加#define RANDNAME
// 某某库文件.cpp
// 发行版本,在该文件不要加测试阶段特定加入的内容

#define RANDNAME

#ifndef RANDNAME   // 有了上面的同名#define RANDNAME,则被包裹的这段内容就不会被添加进去
测试阶段你要添加的内容.........
#endif

至于PERSON_H这个名字可以随便取,只要符合规范就行,但是建议把它写成与源文件的名字对应。

源文件(.cpp):写实现
源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及你需要用到的头文件。那么当你需要用到自己写的头文件中类时,只需要#include进来就行了。
注意:
1、在.h文件中定义了类的属性,在.cpp文件中就不要重复定义,否则链接的时候会报错
2、很多人都是先学的C,所以在包含头文件的时候喜欢用<>,例如#include ,但是在包含自己写的头文件的时候一定要用"",否则可能会报错:No such file or directory

下面举一个简单的例子:
第一步,建立一个空工程(以在Visual C++ 6.0)环境下为例
  点击菜单栏的file - > 选择new(新建) -> 选择project(工程)目录下的Win32 Console Application选项 -> 在右侧输入工程名和存储的位置,下一步 -> 选择“一个 空工  程”,点击完成

第二步,新建头文件Person.h,它的内容如下:

#ifndef PERSON_H
#define PERSON_H
class Person
{
public:
    int age;
    char* name;
    char* sex;
public:
    Person();    //构造函数
    void say();
};
#endif

第三步,要给出Person类的具体实现,因此,新建源文件Person.cpp,它的内容如下:

#include 
#include "Person.h"

using namespace std;

Person::Person()
{
    cout << "创建了一个新的对象!" << endl;
}

void Person::say()
{
    cout << "大家好,我叫" << name << ",性别" << sex << ",今年" << age << "岁." << endl;
}

注意:此处需要将头文件Person.h包含进来。

最后我们新建一个test.cpp来测试我们写的Person类:

#include 
#include "Person.h"

using namespace std;

int main()
{
    Person xc;

    xc.age = 18;
    xc.name = "流浪";
    xc.sex = "男";

    xc.say();
    return 0;
}

注意到开头时有#include "Person.h"的声明,证明我们使用到了我们刚写的Person类。

运行后的输出结果为:
在这里插入图片描述

你可能感兴趣的:(C++编程,C++,头文件,源文件)