当前课程知识点:基于Linux的C++ > 第五讲 程序组织与开发方法 > 5.2 库与接口 > LinuxCPP0502
我们首先来看库与接口
从库与接口角度来讲
实际上C/C++的程序包括了两类文件
一类为源文件 一类为头文件
在实际编程的过程中
源文件往往是以“.cpp”后缀名字
进行保存
而头文件有时是以“.h”
有时是以“.hpp”
还有的时候没有后缀名字来保存
至于用什么样的后缀名字来保存头文件
事实上无关紧要
有没有“.h”、“.hpp”
并不影响头文件的包含
但是对于编译器来讲
使用一个“.h”或“.hpp”
来对头文件进行命名
有助于编译器更好地管理程序
所以 我们设计特定的库
就包括源文件和头文件两个部分
库和原先设计的那些程序是不一样的
同学们要特别记住
当设计一个C/C++程序代码的时候
在每一个程序中必须编写main函数
前面说过 程序总是从main函数的
第一条指令开始执行
然后到main函数的最后一条指令
执行完毕的时候
程序就会结束
这是程序运行的基本的要求
但是设计库的时候情况就不一样了
库从本质上来讲是不会独立地运行的
那就意味着不需要为它编写main函数
所以从库的设计角度来讲
源文件就包括了具体的实现代码
而头文件则提供了库的接口
想使用库就要通过库的接口来使用
正常情况下也就是“.h”、“.hpp”
这样的头文件
有了这样的库有什么好处
对于库的使用者来讲
最大的优势就在于使用库的时候
不需要了解这个库的实现细节
只需要知道“.h”头文件就可以了
不需要去了解库所对应的“.cpp”文件
里面具体的代码是如何实现的
想使用一个函数
那就直接看函数的原型
这个情况是非常常见的
比如说如果想去学开车
那就去驾校
你需要了解发动机、整个汽车的
工作原理吗
又不学修车 只需要学使用它
不需要知道原理的
对于库的使用者也一样
只需要知道库该怎么用就行了
并不需要知道库里面的每一个函数
到底是如何实现的
库和接口的优势就体现在这个地方
C++的标准库提供了一系列的功能
有很多很多个接口
合在一起统称为标准库
标准库实际上包括了两个部分
一类是C的标准库
一类是C++的标准库
早期的C语言提供的标准库
包括了一些基本的标准的输入输出流、
一些工具、辅助函数、字符串
变成了C++程序设计语言之后
C++又提供了自己的标准库
C++的标准库和C标准库是不一样的
这是为C++的程序代码所使用的
包括输入输出流的库
还有一些特定的字符串类
另外还提供抽象的标准模板库
同学们在写程序的时候
既可以使用C的标准库
也可以使用C++的标准库
有一点需要特别注意
数学库在Linux操作系统下面
处理的方式和Windows是不太一样的
数学库本身使用的头文件
在C的代码下面用的是“math.h”
到了C++的程序代码下边呢
使用的是“cmath”
库文件本身是“libm”
链接它的时候应该使用g++ –lm main.cpp
如果使用到了“cmath”
数学库里面的某一个函数
那么就必须把数学库链接进去
刚才讲了在Linux操作系统下面
数学库的处理方式
和Windows是不一样的
在windows下面“cmath”事实上
就是C标准库中的一部分
但是在Linux操作系统下边
数学库是单列的
缺省的时候是不链接数学库的
所以如果链接 那你就用“-l”
链接特定库的选项
后面跟着的就是库的名字
在数学库里面
提供了一系列的数学函数
比如说三角函数、反三角函数、
幂函数、指数函数、对数函数
可以直接用
具体有哪些函数就不解释了
同学们打开帮助手册很快就能够查到
第二个就是工具与辅助函数
对应的头文件是“stdlib.h”
在C++下面用“cstdlib”
提供了一系列常用函数
比如讲exit、free、malloc、rand、srand
这是非常常用的五个函数
exit最主要的目的是退出整个程序的执行
free和malloc是在C下边进行
动态内存分配的函数
以后会解释
最后两个函数rand和srand
用于生成一个随机数
待会就要用这两个函数
来进行随机数库的设计和开发
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口