《C++精粹》之精粹

前言:
《C++精粹》(C++ Distilled)是计算机类书籍中的名著之一,作者是Ira Pohl。该书如同一张通往C++编程精髓的简明地图,同时也是一本编程风格规范的指南。2006年元旦,我读完了这本书,整理完成书内所有源代码,并对重要部分做了载要,此处共享。


第1章 程序结构
1:拥有一种编程风格,并保持一致性
示例程序1
名称:gcd.cpp
功能:计算最大公约数程序
作用:示范程序风格
下载: 源代码

第2章 词法成分
1:C++有6种不同的标记:keyword, identifier, constant, string constant, operator, punctuator.

第3章 常量
1:注意const和#define定义常量的区别

第4章 声明及作用域规则
1:typedef机制用来为它所定义的类型建立一个同义词。
2:声明可以出现在块内任何地方
示例程序2
名称:for_scop.cpp
功能:一些随机数的平均值
作用:示范声明可以在块内任何地方
下载: 源代码

3: ::作用域解析操作符允许访问外部定义的变量。
示例程序3
名称:scope1.cpp
功能:无
作用:示例使用::i来访问外部命名的变量
下载: 源代码

4:类可以嵌套,但内部类必须在外部类的作用域之内。
5:名字域,提供了单独的作用域。
示例程序4
名称:namespac.cpp
功能:无
作用:示例名字空间的嵌套,但不能在vc++下编译,请使用Borland C++
下载: 源代码

第5章 文件链接规则
1:extern的使用
示例程序5
名称:prog1.cpp, prog2.cpp, prog3.cpp, prog4.cpp
功能:无
作用:与其他几个文件(prog1,prog2, prog3)配合,示例extern的用法
下载: 源代码

2:多文件程序中需要的枚举成员和typedef成员应置于头文件中
示例程序6
名称:my_types.h, fcns.cpp,mainfile.cpp
功能:无
作用:示例多文件程序中需要的枚举成员和typedef成员应置于头文件中
下载: 源代码

第6章 类型
1:基本类型有整型和浮点型。
2:新增类型是bool和wchar_t。
3:5个存储类关键字:auto, register, extern, static, typedef
4:2个特殊类型修饰符:const, volatile

第7章 类型转换
1:自动的表达式类型转换规则: int2:C++标准的类型转换有4种
强制类型转换:static_cast (i)
系统依赖性的强制转换,尽量少用:reinterpret_cast (&x)
消除常量限制(const)的转换:const_cast (c_var)
用于运行时类型识别的转换:dynamic_cast
示例程序7
名称:stcast.cpp
功能:无
作用:示例C++标准的强制类型转换
下载: 源代码

第8章 表达式及运算符
1:new和delete是运算符,可以被重载
示例程序8
名称:alloc.cpp
功能:无
作用:示例使用new运算符动态分配数组
下载: 源代码

示例程序9
名称:ovl_new.cpp
功能:重载new,使new变为在已定义数组上查找空间分配
作用:示例重载new运算符
下载: 源代码

2:函数调用()和下标[]都是运算符

第9章 语句
这里都非常熟悉,无需介绍
示例程序10
名称:if.cpp, while.cpp, forloop.cpp, do.cpp, switch.cpp,goto.cpp
功能:见代码注释
作用:示例各种语句,见文件名
下载: 源代码

第10章 函数
1:C++中,函数参数除了声明为应用类型外均为传值调用
示例程序11
名称:stats.cpp
功能:用来寻找一个数据集合的平均值,最大值和最小值
作用:示例函数的引用调用
下载: 源代码

示例程序12
名称:greater.cpp
功能:比较大值
作用:示例C++标准的引用调用和C标准的指针调用
下载: 源代码

2:形参可以有默认值,但必须靠右
示例程序13
名称:power2.cpp
功能:pow()函数默认对n平方
作用:示例函数形参的默认值
下载: 源代码

3:重载:函数用同一名字来实现
示例程序14
名称:avg_arr.cpp
功能:求平均值
作用:示例函数重载
下载: 源代码

4:非C++函数的链接规则可以规定为使用链接说明。最常用的是extern “C”

示例程序15
名称:mult.cpp
功能:求一个数的N次方,默认为2次方
作用:示例函数重载,默认值等
下载: 源代码

第11章 类
1:class的默认类型为私用的,struct的默认类型为公用的
2:构造函数
(1) 默认构造函数:参数列表为空或都有默认值
(2) 拷贝构造函数:形如type::type(const type& x);
(3) 自动转换函数:只带一个参数的构造函数
(4) 不允许自动转换函数:在自动转换函数前加关键字explicit
示例程序16
名称:printabl.cpp
功能:使用ASCII标识打印不可见字符
作用:示例自动转换函数
下载: 源代码

3:友元函数:常用于运算符的重载,原因是若将重载运算符作为非成员函数,只能用友元函数,这样才能对私有成员进行访问
示例程序17
名称:complexc.cpp
功能:复数的加法运算
作用:示例使用友元函数进行二目运算符的重载
下载: 源代码

4:this指针只能用于非静态函数中
示例程序18
名称:clock.cpp
功能:一个计时类,可以增加时间一秒和打印出时间
作用:示例使用this指针
下载: 源代码

5:函数重载的一个特性便是运算符的重载,关键字operator用于重载运算符
示例程序19
名称:vect_ovl.cpp
功能:一个向量类
作用:示例构造函数,运算符重载,错误信息输出等,详见代码
下载: 源代码

6:静态及常值成员函数:静态成员函数不能访问任意一个使用this指针的成员,常量成员函数不能修改成员变量的值。
示例程序20
名称:salary.cpp
功能:一个工资类,计算出总工资数目
作用:示例静态成员函数和常量成员函数的定义和使用
下载: 源代码

7:关键字mutable允许变量中含有const声明的数据成员仍为可修改的
示例程序21
名称:mutable.cpp
功能:修改一个const声明的类的成员变量
作用:示例mutable允许变量中含有const声明的数据成员仍为可修改的
注意:可能VC++(6.0)对C++的新特性支持不够好,所以无法通过编译
下载: 源代码

示例程序22
名称:my_str.cpp
功能:一个简单的string类
作用:示例一个类的设计
下载: 源代码

第12章 继承
1:继承的语法
示例程序23
名称:vect_bnd.cpp
功能:一个继承自vect基类的类
作用:示例继承类的写法
下载: 源代码

2:多继承是从多个基类派生的类,这种类的设计模式叫做模式适配
3:抽象基类:成员函数都是纯虚函数的类
4:类成员指针:形如T::*的指针,如int trio::*p = &trio::b;
示例程序24
名称:trio.cpp
功能:无
作用:示例类成员指针的定义和使用
下载: 源代码

5:运行时类型识别(RTTI)提供了在运行时通过基类指针安全的决定类型指针的机制,主要有下面两个操作符
(1):Derived *bptr=dynamic_cast(ptr);
(2):typeid(bptr).name;
示例程序25
名称:typeid.cpp
功能:输出类型名的字符串
作用:示例操作符typeid()的用法
下载: 源代码

6:虚函数,作用是提供运行时动态选择合适的基类或派生类函数的机制
示例程序26
名称:shape.cpp
功能:分别输出长方形和圆形的面积
作用:示例虚函数实现运行时类型识别的原理
下载: 源代码

示例程序27
名称:student.cpp
功能:输出学生类实例的姓名,ID,年,成绩
作用:示例继承的用法
下载: 源代码

 第13章 模板
1:模板的作用是允许实例为每一个类型自动生成代码
示例程序28
名称:stack_p.cpp
功能:利用栈模板类实现数组元素的反转操作
作用:示例模板类
下载: 源代码

示例程序29
名称:array.cpp
功能:两个模板实例的操作
作用:示例模板的实例化用法及模板类的默认参数
下载: 源代码

2:函数模板:普通函数也可以模板化
示例程序30
名称:swap.cpp
功能:使用函数模板反转两个元素
作用:示例函数模板的用法
注意:因为编译器不支持的原因,该文件在vc6下不能通过编译
下载: 源代码

3:模板专门化:相当于定义一个特例

示例程序31
名称:vect_it.cpp
功能:实例化向量模板类,输出所有元素
作用:示例模板类的定义和用法
下载: 源代码

第14章 异常
1:抛出异常
示例程序32
名称:throw.cpp
功能:函数抛出一个整型变量
作用:示例抛出异常
下载: 源代码

2:异常处理
示例程序33
名称:catch.cpp
功能:去掉注释,抛出异常,看运行结果如何
作用:示例抛出异常和异常处理,说明异常的抛出和处理是精确匹配的
下载: 源代码

3:异常规格说明是函数声明的一部分
4:terminate()和unexpected()的用法

示例程序34
名称:vect_ex.cpp
功能:向量类,多加了异常处理
作用:示例在一个类里抛出异常和异常处理
下载: 源代码

第15章 输入/输出
1:输入输出头文件是iostream.h
2:输出类ostream
(1)格式化输出,操作符见表,有些定义在iostream.h,有些在iomanip.h
示例程序35
名称:manip.cpp
功能:在整型I/O中使用不同的基址
作用:示例格式化输出
下载: 源代码

(2)用户自定义输出
示例程序36
名称:pr_card.cpp
功能:用户自定义的输出程序,外国佬的纸牌玩法不懂,不知道最后输出的内容
作用:示例自定义的输出
下载: 源代码

示例程序37
名称:pr_card2.cpp
功能:改进上一例【用户自定义的输出程序】,重载<<输出
作用:示例模板的实例化用法及模板类的默认参数
下载: 源代码

3:输入流istream:包含>>,get, getline ,read 等成员
示例程序38
名称:basic_i.cpp
功能:无
作用:示例基本输入
下载: 源代码

4:文件:顺序处理的字符串流,包含fstream.h进行I/O处理,重要函数有open, close
5:流式字符串:必须包含头文件strstream.h,可使用istrstream和ostrstream两个类
示例程序39
名称:str_strm.cpp
功能:无
作用:示例istrstream类的使用
下载: 源代码

6:ctype.h中定义了一组测试字符的函数和字符转换函数。
7:对于某一特定的流,可使用一些函数进行测试。
示例程序40
名称:word_cnt.cpp
功能:计算单词个数,从键盘输入字符得不到正确结果,仅是示范
作用:示例使用流状态
下载: 源代码

8:混和I/O流库,即混和iostream.h和stdio.h,使用ios::sync_with_stdio();就可以混用
示例程序41
名称:mix_io.cpp
功能:计算N的阶乘
作用:示例混和I/O流库
下载: 源代码

示例程序42
名称:dbl_io.cpp
功能:把一个文件的内容多加一行空行并写入另一个文件中
作用:示例文件的读写
下载: 源代码

第16章 STL
1:容器
示例程序43
名称:stl_cont.cpp
功能:使用STL链表容器将数组排序并求和
作用:示例STL链表容器的用法
下载: 源代码

示例程序44
名称:stl_deq.cpp
功能:将向量里的元素存入双端队列里,并求所有元素之和。
作用:示例STL向量和双端队列的用法
下载: 源代码

(1)序列式容器:包括向量、链表和双端队列
示例程序45
名称:stl_vect.cpp
功能:将向量里的元素插入双端队列里
作用:示例STL向量和双端队列的用法
注意:在VC6.0里无法通过编译,请在对C++STL支持更好的编译器里进行编译
下载: 源代码

(2)关联式容器:包括集合、图、多重集合、多重图,他们有基于关键字的可访问元素
示例程序46
名称:map_age.cpp
功能:初始化图,并输出
作用:示例STL图的用法
下载: 源代码

(3)容器适配器:包括堆栈,队列,优先队列
示例程序47
名称:stl_stak.cpp
功能:利用栈先进先出的特点倒序输出三个字符串
作用:示例STL栈的用法
下载: 源代码

2:迭代器,可以看作是一个增强型的指针
示例程序48
名称:stl_iter.cpp
功能:将元素插入集合,并输出
作用:示例STL迭代器和集合的用法
下载: 源代码

(1)输入流迭代器-istream_iterator
示例程序49
名称:stl_iitr.cpp
功能:无
作用:示例STL输入流迭代器
下载: 源代码

(2)输出流迭代器-ostream_iterator
示例程序50
名称:stl_oitr.cpp
功能:无
作用:示例STL输出流迭代器
下载: 源代码

(3)迭代器适配器-提供后序遍历和插入操作的遍历
示例程序51
名称:stl_iadp.cpp
功能:分别正常和使用反向迭代器反向输出某个向量里的元素
作用:示例STL反向迭代器
下载: 源代码

3:算法――包括分类算法,非质变序列算法,质变序列算法,数值算法
(1)分类算法――包括常规分类、归并、字符串比较、排列、二分搜索等
示例程序52
名称:stl_sort.cpp
功能:对随机产生的数据进行排序
作用:示例分类算法
下载: 源代码

(2)非质变序列算法――不改变容器的内容
示例程序53
名称:stl_find.cpp
功能:寻找字符串"hop"的位置,输出其后的单词
作用:示例非质变序列算法
下载: 源代码

(3)质变序列算法――改变容器的内容
示例程序54
名称:stl_revr.cpp
功能:填充一个向量,并反序,用到质变函数copy与reverse
作用:示例质变序列算法
下载: 源代码

(4)数值算法――求和,内积,相邻差额
示例程序55
名称:stl_numr.cpp
功能:求向量和、向量内积
作用:示例数值算法
下载: 源代码

4:函数对象
(1)STL有三类函数对象,分别是算术对象,比较对象,逻辑对象
示例程序56
名称:stl_fucn.cpp
功能:使用了函数对象minus
作用:示例STL函数对象
下载: 源代码

(2)函数适配器――创建自己的函数对象
示例程序57
名称:stl_adap.cpp
功能:使用了绑定函数bind2nd()
作用:示例函数适配器
下载: 源代码

第17章 字符串库
1:C++通过标准头文件string来提供字符串类型
示例程序58
名称:stl_strg.cpp
功能:无
作用:示例string类的用法
下载: 源代码
第18章 注意事项及兼容性
第19章 C++的新特性
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值