第三篇
ch7 函数
7.1 概述
-
形参和实参: 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参.函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
-
函数声明
-
不需指定参数的名字 只需要每个参数的类型
int abs( int );
int min( int, int );
int gcd( int, int );
函数声明 以及 inline 函数的定义 最好放在头文件中 这些头文件可以被包含 include在每个调用该函数的文件中。
7.2 函数原型(声明和调用)
7.3 参数传递
- 7.3.1 把参数声明成引用
- 7 .3.2 引用和指针参数的关系
- 7.3.3 数组参数 (第一个的指针)
- 7.3.4 抽象容器类型参数(vector)
- 7.3.5 缺省实参(char *screenInit( int height = 24, int width = 80, char background = ’ ’ );)
- 7.3.6 省略号 ellipsis
它们的出现告知编译器 当函数被调用时 可以有 0 个或多个实参 ,而实参的类型未知 ,省略号有下列两种形式:
void foo( parm_list, … );
void foo( … );
第一种形式为特定数目的函数参数提供了声明 在这种情况下 ,当函数被调用时, 对于与显式声明的参数相对应的实参进行类型检查, 而对于与省略号对应的实参则挂起类型检查,在第一种形式中 参数声明后面的逗号是可选的。
7.4 返回一个值(引起函数的强制结束)
- 如果返回值是一个大型类对象 用引用 或指针 返回类型比按值返回类对象效率要高得多
- Matrix:矩阵
7.5 递归
7.6 inline函数(针对调用函数很慢的问题)
- 若一个函数被指定为 inline 函数 则它将在程序中每个调用点上被 内联地 展开。例如
int minVal2 = min( i, j ); 在编译时被展开为
int minVal2 = i < j << i : j; 把 min()写成函数的额外执行开销从而被消除了。 - 建议把 inline 函数的定义放到头文件中
7.7 链接指示符:extern"C"
- 程序员用链接指示符 linkage directive 告诉编译器 该函数是用其他的程序设计语言编写的 链接指示符有两种形式 既可以是单一语句 single statement 形式 也可以是复合语句 compound statement 形式
// 单一语句形式的链接指示符
extern “C” void exit(int);
// 复合语句形式的链接指示符
extern “C” {
int printf( const char* … );
int scanf( const char* … );
}
// 复合语句形式的链接指示符
extern “C” {
#include < cmath >
}
7.8 main():处理命令行选项
7.9 指向函数的指针※(自己写一个sort()函数)
ch8 域和生命期
8.1域(用来区分名字含义的一般上下文)
- 局部域 local scope
- 名字空间域 namespace scope
- 类域 class scope
8.2 全局对象和函数
8.3 局部对象
8.4 动态分配的对象
8.5名字空间定义※
8.6 使用名字空间成员※
ch9 重载函数
◆9.1 重载函数声明
9.2重载解析的三个步骤
◆9.3 参数类型转换※
◆9.4 函数重载解析细节
ch10 函数模板
10.1函数模板定义
10.2函数模板实例化
10.3模板实参推演※
10.4显式模板实参※
10.5 模板编译模式※
10.6模板显式特化※
10.7重载函数模板※
10.8考虑模板函数实例的重载解析※
10.9模板定义中的名字解析※
10.10名字空间和函数模板※
10.11函数模板示例
ch11 异常处理
11.1抛出异常
11.2 try块
11.3 捕获异常
11.4异常规范
11.5异常与设计事项
ch12 泛型算法
12.1概述
- 要使用泛型算法 我们必须包含相关的头文件#include < algorithm>
- 如果要使用以下四个算术算法 adjacent_difference() accumulate() inner_product()以及partial_sum() 则必须包含#include < numeric>
- 所有泛型算法的前两个实参都是一对 iterator 迭代器 通常称为 first 和 last 标记出 内置数组或容器中要操作的元素的范围
12.2使用泛型算法
12.3 函数对象
12.4 回顾iterator
◆12.5泛型算法
◆12.6何时不用泛型算法