《C++高级进阶教程》 第六章模板与标准模板库

目录

 

6.1 关于模板参数

6.2 模板实例化

6.3 函数声明对函数模板实例化的屏蔽

6.4 将模板声明为友元

6.5 模板与分离式编译

6.6 关于模板特化

6.7 输入输出迭代子的用法

6.8 bitset的简单用法

6.9 typename的用法

6.10 什么是防函数

6.11 什么是引用计数

 

 

 


6.1 关于模板参数

模板是怎么来的呢?为什么要引入模板?

前面我们说过C++比C语言多了一个函数重载,考虑这样一种场景,就是一个函数,除了输入类型或者个数不同,其他处理逻辑都一样,如果采用函数冲在实现,需要写多分非常类似的函数。 那为了简化这种场景,就引入了模板。

普通的模板有模板函数和模板类。就是处理这种情况。

模板参数有两种:一种是类型参数,一种是非类型参数。

另外,模板参数也可以去模板,具体见P226

6.2 模板实例化

隐士实例化,只有函数模板可以。类模板的使用必须用显示实例。

第一种是发生调用的时候,实参并没有显示指定。 

第二种是在发生调用的时候,讲实参显示化 

第三种是没有发生调用的时候,通过声明将模板函数或者模板类实例化。

 

所有的模板的实例化,都要提供模板类或者模板函数的完整定义。所有一般把他的定义(而不是声明)放到hpp文件中。

然后单独找个文件,把所有想要用到的提前显示实例化。

6.3 函数声明对函数模板实例化的屏蔽

6.4 将模板声明为友元

用得少,忽略

6.5 模板与分离式编译

下面的例子,非常符合以往C++的编程风格,但是就是编译不通过。我们前面提到过模板函数实例化,要有两个条件:

1 - 发生了函数调用或者显示实例或者实参实例。

2 - 同一份代码中,必须要有模板的定义。但是在本例main.cpp中调用func(3);本来应该可以隐士实例化,但是Main.cpp里面包含的是func.h这个里面只有声明没有定义。所以编译不通过。

解决办法:

1 - 将模板定义放到hpp里面。

2 - 再构造一个cpp或者在模板定义的cpp里面,把所有想要用到的类型都显示实例化。

6.6 关于模板特化

模板前面说了只要逻辑一样,输入参数不一样,就可以写成一样的模板。但是有的大部分一样,但是还是有个别类型需要单独处理,这时候就用到了模板特化。

6.7 输入输出迭代子的用法

 

6.8 bitset的简单用法

这个其实就是单独处理每一位的一个操作模板类。

6.9 typename的用法

 

6.10 什么是防函数

其实就是类重载了 operator()函数

6.11 什么是引用计数

 

6.12 什么是ADL

 

 

 

本资源是压缩包形式的, 里面包含 本书,里面是pdf格式的, 带书签目录,本书是完整版的。 资源都是我自己用过的,不骗大家。 本书作者: 肖俊宇 吴为胜; 出版社: 电子工业出版社 内容简介: 《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》是C++语言的入门教程,较为系统地介绍了C++语言的基础内容。本书共分为3篇22章,详细介绍了C++语言的基础知识、面向对象、标准模块、底层开发和综合案例。本书循序渐进地讲述了C++的基础知识、C++程序的组成及其开发过程、C++程序中的数据、表达式和语句、控制程序流程、数组与字符串、指针与引用、使用函数、函数模板、错误和异常处理、宏和预编译、面向对象的开发、封装、继承、多态、类模板、文件流、标准模板STL和编程实践等内容。 《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》涉及面广,从基本知识到高级内容和核心概念,再到综合案例,几乎涉及C++开发的所有重要知识。本书适合所有想全面学习C++开发技术的人员阅读,尤其适合没有编程基础的C++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于C++语言开发爱好者,本书也有较大的参考价值。 章节目录: 第1篇 C++基础篇 第1章 C++概述 1 1.1 引言 1 1.1.1 C++的历史沿革 1 1.1.2 入门C++ 2 1.1.3 编程思想的转变 3 1.2 C++概述 4 1.2.1 C++的特征 5 1.2.2 C与C++的比较 5 1.2.3 C++的应用领域 6 1.3 C++源程序的组成 6 1.3.1 基本组成元素 7 1.3.2 标识符 8 1.3.3 保留字 8 1.3.4 符号 8 1.4 C++集成开发环境——DEV-C++ 9 1.4.1 选择C++编译器 9 1.4.2 安装DEV-C++ 10 1.4.3 DEV-C++ IDE简介 11 1.5 第一个C++程序——Hello World 11 1.5.1 创建源程序 11 1.5.2 编译运行 13 1.6 小结 14 1.7 习题 14 第2章 变量与数据类型 18 2.1 常量和变量 18 2.1.1 常量 18 2.1.2 变量 21 2.1.3 变量的定义及赋值 22 2.1.4 变量的应用示例 24 2.2 基本数据类型 25 2.2.1 基本数据类型概述 25 2.2.2 整型数据类型 26 2.2.3 浮点型数据类型 27 2.2.4 字符型数据类型 29 2.2.5 布尔型数据类型 30 2.3 变量的作用域 31 2.4 类型转换 32 2.4.1 隐式转换 32 2.4.2 显式转换 33 2.5 小结 34 2.6 习题 34 第3章 表达式与语句 39 3.1 运算符 39 3.1.1 运算符概述 39 3.1.2 算术运算符 40 3.1.3 自增和自减运算符 42 3.1.4 赋值运算符 43 3.1.5 关系运算符 44 3.1.6 逻辑运算符 45 3.1.7 条件运算符 46 3.1.8 逗号运算符 47 3.1.9 位运算符 48 3.1.10 sizeof运算符 49 3.2 运算符的优先级和结合性 50 3.3 表达式 51 3.4 语句 53 3.4.1 空格的作用 53 3.4.2 语句块 54 3.4.3 赋值语句 55 3.4.4 空语句 56 3.5 小结 57 3.6 习题 57 第4章 流程控制结构之顺序结构 63 4.1 程序流程图 63 4.2 表达式语句 64 4.3 格式化输入/输出 65 4.3.1 标准输入流cin 65 4.3.2 标准输出流cout 66 4.3.3 输出流cerr和clog 68 4.4 格式控制函数 69 4.5 格式控制符 71 4.5.1 控制不同进制的输出 72 4.5.2 控制输出宽度 72 4.5.3 控制输出精度 73 4.6 顺序结构综合应用 74 4.7 小结 75 4.8 习题 75
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值