C++抽象编程——接口(1)——.h文件与.cpp文件的建立

在我们之前写过的程序中,都有这一句:

#include <XXX>

其中的< XXX >就是一个库。那么这里面到底包含了什么呢?这又是怎么实现的呢?

接口与实现(Interfaces and implementations)

当我们在C++中定义库时,需要提供两个部分。首先,我们必须定义接口(interface),它提供了客户端使用库所需的信息,但我们要注意留出关于库如何工作的详细信息(即注释)。 其次,要提供实现的功能,其中指定了底层细节。 典型的接口将导出几个定义,通常是函数,类型或常量。每个单独的定义称为接口条目( interface entry)。

在C ++中,接口和实现通常被写成两个单独的文件。接口文件的名称以 .h 结尾,我们称为为头文件(header file)。 它的实现将出现在具有相同根目录但具有后缀* .cpp *的文件中。举个例子,error库在文件error.h中定义,并在文件error.cpp中实现。下面我们就来实现这个库。

定义 error库(Defining the error library)

我们先看一段代码:

/*
* File: error.h
* -------------
* This file defines a simple function for reporting errors.
*/
#ifndef _error_h
#define _error_h
/*
* Function: error
* Usage: error(msg);
* ------------------
* Writes the string msg to the cerr stream and then exits the program
* with a standard status code indicating failure. The usual pattern for
* using error is to enclose the call to error inside an if statement that
* checks for a particular condition, which might look something like this:
*
* if (divisor == 0) error("Division by zero");
*/
void error (std::string msg);
#endif

我就不翻译了,知道格式就好,这是个头文件。我们可以看到,该文件主要由注释组成。接口的唯一其他部分是error函数的原型和三个额外的线,这些通常被称为接口样板(interface boilerplate),它是每个接口中出现的一组线条。在此接口中,样板由接口开头的 #ifndef和#define行 组成,最后对应匹配的#endif行。这些行用于确保编译器不会编译两次相同的接口。#ifndef指令检查_error_h符号是否已被我们之前定义过。当编译器第一次读取这个接口时,答案是否定的。然而,下一行定义了该符号。因此,如果稍后要求编译器读取相同的接口,则_error_h符号将已经被定义,编译器将在此时跳过接口的内容,执行已定义的文件。我们以后约定:在用下划线替换点之后,检查下划线开头的符号,然后是接口文件的名称:

#ifndef _error_h //下划线代替点

PS:在我们理解一个名词的解释的时候,其实我们可以根据它的英文意义去解释它。比如“ifndef”,我们可以这样理解 if no define,如果是,就执行我们的文件,否就执行以前的定义的文件。

然而,与我们以前写过的代码,看起来略有不同。 参数声明现在使用类型名称std :: string来表示字符串来自std命名空间(以前是using namespace std)。原因是接口通常在使用命名空间std行之前读取,因此不能使用该命名空间的标识符
接下来就是我们的实现功能了。我们把上面的声明文件的实现放在 .cpp文件上,

/*
* File: error.cpp
* ---------------
* This file implements the error.h interface.
*/
#include <iostream>
#include <cstdlib>
#include <string>
#include "error.h"
using namespace std;
/*
* Implementation notes: error
* ---------------------------
* This function writes out the error message to the cerr stream and
* then exits the program. The EXIT_FAILURE constant is defined in
* <cstdlib> to represent a standard failure code.
*/
void error(string msg) {
cerr << msg << endl;
exit(EXIT_FAILURE);
}

因为我们要用的是error的函数,所以我们导入这个头文件

#include "error.h";

注意,这个时候我们的头文件是自己定义的,所以我们用的是双引号括住,系统定义的我们就用< > 括住

建立头文件与实现文件(基于VS2010)

第一步: 打开VS2010,然后新建一个项目,右键“头文件”这个文件夹,建立一个.h文件,我们的头文件在这里写。

第二步,我们在源文件里面再建立一个Cpp文件,这里写的是我们实现的功能。然后我们的main函数的cpp文件也是在源文件文件夹中的。

第三步,我们就在text文件里面去实现我们的功能,结果如下:

PS:我们介绍这个,是因为后面的随机数算法都是在这个基础上建立的。考虑到大多数人都是用VS,我就举个vs的例子(我用的是dev)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值