C++是目前最流行且被广泛应用的程序设计语言之一,它的高效率和面向对象技术备受推崇。本书由浅入深,循序渐进地讲解了C++的各个知识点,并结合了一些实用的知识讲解了C++的主要应用。全书内容包括C++的发展历史和特点、基本元素与结构、基本数据类型、语句与控制结构、数组、指针与引用、自定义类型与字符串、面向对象设计思想和类、重载技术、继承与派生技术、虚函数与多态性、模板与命名空间、标准模板库、输入输出体系、异常处理、API编程和MFC框架、多线程处理、链接库、基本算法、数据结构、数据库编程、网络编程等。为了使读者能够真正掌握C++的应用,书中最后两章通过建立两个实用的程序来向读者介绍C++的具体应用。
本书适合C++初学者、具有一定C语言或者C++语言基础的中级学习者、学习C++的大中专院校的学生,同时也可以作为院校C++教学工作者的教学参考书。 |
21世纪是科学技术迅速发展的时代,信息技术的飞速发展带来社会的巨大进步。计算机技术在信息技术发展中起到了关键的作用,各种先进的软件系统层出不穷,由之带来了巨大的社会价值。软件开发的不断发展也使编程语言的种类越来越丰富。一直以来,C++语言作为最流行、应用最广泛的语言已经被应用到各个行业的软件开发中。特别是在一些对应用程序的效率要求比较高的行业中,如通信、控制、嵌入式设计和图形软件设计等,C++技术的应用更加广泛。
C++语言的前身是C语言。C语言从诞生至现在已经有30多年,C++语言诞生(1983年C++第一次投入使用)也将近30年。这说明C/C++语言是禁得起时间考验的语言,越来越多的人都在不断学习和研究C++语言。从笔者实际的教学经验和参加项目开发的过程中,学习者普遍反映C++是一门十分难掌握的语言。笔者经过调查,发现C++语言之所以“难学”,表现在以下几点。
(1)C++本身确实是比较难以理解的语言,特别是面向对象思想,并不是每个人立即就能理解的。要做到深入理解,必须坚持学习和运用C++技术,这是大部分人做不到的。
(2)目前与C++技术相关的工具过多,而每个工具又具有自己的特点,导致学习者无法分清哪些技术是C++语言本身的,哪些是和编译器相关的。这样下去,只会使学习者越来越糊涂,分不清方向。
(3)目前市场上的C++书籍,有些书的内容过深,不适合初学者使用。
基于以上几点,笔者认为只要克服这些弊端,完全可以学好C++。对于第(1)点,读者只要能做到坚持不懈,就可以克服;对于第(2)点,只要读者选定一个固定的C++编译系统去学习,当熟悉了这个编译系统的应用后,即可触类旁通;对于第(3)点,需要有一本适合于初学者和中等水平者阅读和参考的书籍即可。
本书编写的目的就是为C++初学者和中等水平者提供良好的学习和参考工具。本书选定经典而完善的开发工具Visual C++ 6.0为编译器,结合C++基础语言和重要应用向读者逐一讲解C++的知识点。相信读者在阅读完本书后,即可独立进行常规的应用开发,并为深入学习更高级的C++技术作好铺垫。
本书特点
1.体系完善,涵盖全面
为了能使读者在学习完本书后,即能进行常规的开发任务,书中不仅讲解C++的基础知识,还讲解了算法、数据结构、网络和数据库等方面的知识,最后将这些知识和C++技术结合,给读者深入分析了C++在这些方面的应用,为读者实际进行开发提供了良好的知识体系。
2.由浅入深,循序渐进
为了使读者能容易地理解本书所讲解的知识点,本书不设置枯涩难懂的语言描述和难以理解的实例。所有的知识点都是先进行通俗的理论讲解后,再用实例进行演示。让读者在彻底理解此知识点的基础上,能有更多的思考,而不是一开始就让读者陷入枯涩的语言和例子中。
3.案例精讲,深入剖析
为了使读者对每个知识点都有较深的理解并熟练地掌握。大部分章节后面都有典型的实例分析。这些例子一方面需要读者亲自动手进行解决,另一方面本书会对解决步骤和相关代码进行讲解。通过这两方面的措施,能使读者对实例中包含的知识点有非常直观的认识,使读者具备实际动手的能力。从而真正掌握书中的知识。
本书内容
第1章:本章主要介绍了C++的发展历史和特点,并分析了C++程序的构成和典型开发环境,最后介绍了Visual C++ 6.0的安装和配置。
第2章:本章对C++中基本的元素和结构进行了讲解。读者真正学习C++语言的语法从此开始。通过本章的学习,读者会了解C++语言到底有哪些基本的元素可用,C++程序的基本结构是什么。
第3章:本章介绍了C++基本数据类型及相互转换。C++的数据类型比较丰富,特别是自定义数据类型。通过本章学习,让读者掌握C++语言基本数据类型的运用。
第4章:本章详细介绍了C++语句和控制结构。C++语句是程序的基本单位,控制结构则是实现逻辑的一种重要手段。通过本章学习,读者会对控制结构及其语句结构有深入的了解。
第5章:本章详细介绍了C++中的一维数组、二维数组、多维数组和字符数组的概念和应用。字符数组在以后的应用中更为广泛和重要,所以更加详细地介绍了字符数组的相关知识。通过本章的学习,读者可以掌握数组的应用。
第6章:本章详细介绍了函数的概念和相关知识。函数在各种语言中都非常重要,对于C++语言更是如此。通过本章的学习,读者可以深入理解函数的概念、掌握函数的运用。
第7章:指针和引用是C++中比较难理解和掌握的技术。本章通过大量的篇幅对它们进行了讲解,将其知识点细分并给出许多示例,帮助读者快速准确地掌握其运用。通过本章的学习,读者能够掌握指针和引用的实际运用。
第8章:本章在第3章的基础上,对自定义类型进行讲解。特别是针对字符串的讲解,是本章的核心。字符串在以后的运用中最为广泛,读者需要熟练掌握对其的操作。
第9章:面向对象思想是C++语言的核心思想。本章详细介绍了其思想方法,并讲解了C++中最重要的数据类型——类。类是表现面向对象思想的最直观的数据结构,读者需要深入理解其含义和结构。
第10章:本章讲述了C++重载技术的概念和具体实现方法,特别介绍了运算符的重载技术。通过本章的学习,读者可以掌握函数重载的运用以及重载运算符的方法。
第11章:继承和派生技术是面向对象基本特点之一,其对软件的复用具有重要的意义。本章详细地讲解了继承和派生技术的概念、运行机制和作用等。通过本章的学习,读者可以理解继承的机制和作用,掌握建立派生类的方法,以及复杂继承的应用。
第12章:本章介绍了类的虚函数与多态性的原理及其应用,特别对于纯虚函数与抽象类进行了讲解。通过本章的学习,读者可以理解类的虚函数和多态性的特性,掌握类的多态性的运用。
第13章:本章介绍了模板和命名空间的概念及其应用。模板是C++中一种重要的参数化多态技术,命名空间是一种控制对象作用域的重要手段。通过本章的学习,读者可以有效地把握模板的使用,认识标准模板库并能正确地使用它。
第14章:标准模板库(STL)是C++技术的一个重要内容,是一组通用的数据结构和算法的集合。本章主要介绍STL的概念、内容,详细讲述了对象的应用。
第15章:输入输出系统(I/O)是C++与外界进行数据交互的手段。本章首先分析了C和C++的I/O的优劣,然后对C++各种I/O对象做了详细的介绍,特别介绍了运算符的重载和文件的操作。
第16章:C++异常处理给处理程序的潜在错误提供了巨大的便利。本章详细介绍了异常的概念和分类以及异常处理机制。通过本章的学习,读者可以了解异常的概念和分类,掌握类和函数中的异常处理。
第17章:本章主要介绍利用API和MFC进行编程的基础知识,为后面的学习打下了基础。通过本章的学习,读者可以理解API编程原理、MFC基本框架;掌握API编程基本方法、MFC基本开发流程。
第18章:多线程是程序设计中的一个重要环节。本章从多线程的概念开始讲起,介绍了与线程相关的一系列操作。通过本章的学习,读者可以理解线程的概念,掌握多线程实现的基本方法和线程间的通信等。
第19章:本章介绍了利用C++进行静态/动态链接库的开发以及C++调用静态/动态链接库的方法。通过本章的学习,读者可以了解链接库的基本知识,并能编写简单的静态/动态链接库。
第20、21章:这两章介绍了数据结构方面的知识,包括基本算法和典型的数据结构。这两章的内容有助于读者对后面的程序进行深入的理解;并能扩展读者的知识面,为熟练应用C++技术打下良好的基础。
第22章:本章详细介绍了C++数据库编程方面的知识,特别针对通用数据库接口ODBC进行了详细的讲解和举例,并从API和MFC两个方面对其应用进行了描述。
第23章:网络编程是目前程序设计中非常重要的技术。本章从网络的基本知识讲起,详细地讲解了在C++环境下利用SOCKET进行编程的基本方法和典型应用。通过本章的学习,读者可以了解网络的基本知识,SOCKET编程的基本方法。
第24章:本章首先介绍了ADO数据库访问技术细节,然后利用此技术建立了一个实际的应用实例。以此来向读者演示ADO的实际应用。
第25章:本章通过开发一个火车信息查询系统,演示了在C++下利用SOCKET进行编程的应用。通过本章的学习,读者可以掌握网络编程的基本步骤和方法。
本书读者
C++初学者。
具有一定C语言或者C++语言基础的中级学习者。
学习C++的大中专院校的学生。
C++教学工作者。
社会培训班学员。
本书编者
本书主要由徐兆元编写,其他参与编写和资料整理的人员有刘成、马臣云、潘娜、阮履学、陶则熙、王大强、王磊、徐琦、许少峰、颜盟盟、杨娟、杨瑞萍、于海波、俞菲、曾苗苗、赵莹、朱存等。
编者
2009年7月 |
第一篇 基础篇
第1章 概述 2
1.1 计算机程序设计语言概述 2
1.2 了解C++ 3
1.2.1 发展历史和特点 3
1.2.2 程序的构成 3
1.3 开发环境 4
1.3.1 开发系统组成和开发流程 4
1.3.2 典型C++开发环境 6
1.3.3 安装Visual C++ 6.0 7
1.3.4 第一个C++程序:Hello World! 10
1.4 小结 12
第2章 基本元素与结构 13
2.1 常量和变量 13
2.1.1 常量 13
2.1.2 变量 15
2.2 基本元素 15
2.2.1 关键字 16
2.2.2 标识符 16
2.2.3 运算符 17
2.2.4 标点符号 21
2.3 基本结构 21
2.3.1 main函数 21
2.3.2 预处理命令 22
2.3.3 基本输入输出 23
2.3.4 注释 25
2.4 本章实例 26
2.5 小结 27
第3章 基本数据类型 28
3.1 数据类型分类 28
3.2 整型类型 28
3.3 实型类型 30
3.4 字符类型 32
3.5 逻辑类型 34
3.6 变量存储限定符 34
3.7 基本数据类型的转换 35
3.7.1 系统自动转换 35
3.7.2 强制类型转换 36
3.8 本章实例 37
3.9 小结 38
第4章 语句与控制结构 39
4.1 表达式 39
4.2 流程图 40
4.3 顺序结构 40
4.4 选择结构 41
4.4.1 if语句 41
4.4.2 switch语句 42
4.5 循环结构 44
4.5.1 利用goto语句和if语句构成循环 44
4.5.2 while语句 45
4.5.3 do-while语句 46
4.5.4 for语句 47
4.5.5 break语句 49
4.5.6 continue语句 50
4.6 本章实例 51
4.7 小结 53
第5章 数组 54
5.1 一维数组的概念和存储 54
5.1.1 一维数组的定义和初始化 54
5.1.2 一维数组的引用 55
5.1.3 一维数组内存结构和寻址 56
5.2 二维数组 57
5.2.1 二维数组的定义和初始化 57
5.2.2 二维数组的引用 58
5.2.3 二维数组内存结构和寻址 59
5.3 多维数组 59
5.3.1 多维数组的定义和初始化 59
5.3.2 多维数组的引用 60
5.3.3 多维数组内存结构和寻址 60
5.4 字符数组 61
5.4.1 字符数组的定义和初始化 61
5.4.2 字符数组的引用 61
5.4.3 利用字符数组操作字符串 62
5.5 本章实例 63
5.6 小结 64
第6章 函数 65
6.1 函数的概念和定义 65
6.2 函数原型 66
6.3 函数参数 68
6.3.1 函数参数传递方式 68
6.3.2 main( )函数的参数 69
6.3.3 省略符形参 70
6.4 函数作用域规则 70
6.4.1 作用域 70
6.4.2 局部变量 71
6.4.3 全局变量 71
6.5 函数的嵌套与递归调用 72
6.6 内联函数 73
6.7 函数的模板 75
6.8 本章实例 75
6.9 小结 77
第7章 指针与引用 78
7.1 指针的概念和基本用法 78
7.1.1 指针的概念 78
7.1.2 指针变量的声明 78
7.1.3 地址运算符 79
7.1.4 指针的赋值 80
7.1.5 指针运算 81
7.1.6 const指针 82
7.1.7 void指针 84
7.1.8 指针的指针 84
7.2 指针与数组 85
7.2.1 指针数组 85
7.2.2 数组名以及下标和指针的关系 86
7.3 指针与函数 88
7.3.1 指针作为函数参数 88
7.3.2 指针函数 90
7.3.3 指向函数的指针 91
7.4 指针和动态内存的分配 93
7.4.1 C++内存分配机制 93
7.4.2 C++风格的动态内存分配方法 94
7.4.3 C风格的动态内存分配方法 99
7.4.4 动态内存分配陷阱 100
7.4.5 动态内存的传递 102
7.5 引用 104
7.5.1 引用的概念和基本用法 104
7.5.2 引用作为函数参数 106
7.5.3 引用作为返回值 107
7.6 本章实例 108
7.7 小结 109
第8章 自定义类型与字符串 110
8.1 结构体 110
8.1.1 结构体的概念和声明 110
8.1.2 结构体变量的定义 111
8.1.3 结构体变量的初始化 113
8.1.4 结构体的使用 114
8.2 共用体 116
8.2.1 共用体类型及其变量 117
8.2.2 共用体的使用 118
8.3 枚举类型 119
8.3.1 枚举类型与枚举变量 120
8.3.2 枚举类型的使用 120
8.4 类型定义 121
8.5 字符串 122
8.5.1 C风格字符串处理 122
8.5.2 用指针操作字符串 123
8.5.3 C++字符串处理 126
8.5.4 常用字符串的操作函数 128
8.6 本章实例 130
8.7 小结 133
第二篇 面向对象篇
第9章 面向对象设计思想和类 136
9.1 程序设计思想 136
9.1.1 结构化程序设计思想 136
9.1.2 面向对象程序设计思想 137
9.2 类 138
9.2.1 类的定义和组成 138
9.2.2 类成员的访问控制 141
9.2.3 类实例和类成员访问 143
9.2.4 类的作用域和对象的生存周期 146
9.2.5 this指针 146
9.2.6 静态成员 147
9.2.7 常成员 151
9.3 构造函数和析构函数 153
9.3.1 构造函数 153
9.3.2 拷贝构造函数 157
9.3.3 默认拷贝构造函数 159
9.3.4 浅拷贝和深拷贝 161
9.3.5 析构函数 164
9.4 类的组合 166
9.4.1 类的组合的概念 166
9.4.2 组合类的构造函数和析构函数 167
9.4.3 组合类的初始化 168
9.5 友元函数和友元类 170
9.5.1 友元的需求性和定义 170
9.5.2 友元函数 171
9.5.3 友元类 174
9.6 本章实例 176
9.7 小结 178
第10章 重载技术 179
10.1 重载函数 179
10.1.1 重载函数的概念和定义 179
10.1.2 重载函数的使用 180
10.2 运算符重载 181
10.2.1 运算符重载的需求 181
10.2.2 运算符重载的基本方法和规则 182
10.2.3 增减量运算符的重载 185
10.2.4 转换运算符的重载 187
10.2.5 赋值运算符的重载 189
10.3 本章实例 190
10.4 小结 192
第11章 继承与派生 193
11.1 继承与派生 193
11.1.1 继承与派生的概念 193
11.1.2 派生类的声明 194
11.1.3 生成派生类的步骤 195
11.2 继承中的访问控制 198
11.2.1 公用继承的访问控制 198
11.2.2 私有继承的访问控制 199
11.2.3 保护继承的访问控制 201
11.3 派生类的构造函数和析构函数 202
11.3.1 派生类的构造函数 202
11.3.2 派生类的析构函数 205
11.4 基类与派生类的相互作用 207
11.4.1 派生类成员的标识和访问 207
11.4.2 基类和派生类赋值规则 209
11.5 多重继承特性 210
11.5.1 多重继承引起的二义性问题 210
11.5.2 虚拟继承和虚基类 210
11.6 本章实例 212
11.7 小结 218
第12章 虚函数与多态性 219
12.1 多态性 219
12.1.1 多态的概念和类型 219
12.1.2 多态的实现方式 220
12.2 虚函数 220
12.2.1 虚函数的概念和定义 220
12.2.2 虚函数的使用规则 225
12.3 纯虚函数与抽象类 226
12.3.1 纯虚函数 226
12.3.2 抽象类和抽象基类 226
12.4 本章实例 228
12.5 小结 234
第13章 模板与命名空间 235
13.1 模板的概念与作用 235
13.1.1 模板的概念 235
13.1.2 模板的作用 235
13.2 函数模板 236
13.2.1 函数模板的定义和使用 237
13.2.2 重载模板函数 239
13.3 类模板 240
13.4 命名空间 245
13.4.1 程序中的命名冲突分析 245
13.4.2 命名空间的概念 247
13.4.3 命名空间的使用 247
13.4.4 标准命名空间std 250
13.4.5 C++头文件的使用 250
13.5 本章实例 251
13.6 小结 254
第14章 标准模板库 255
14.1 泛型化编程与STL介绍 255
14.1.1 泛型化编程的概念 255
14.1.2 C++标准库与STL的内容 255
14.2 STL的使用 256
14.2.1 容器 257
14.2.2 迭代器 259
14.2.3 算法 260
14.3 本章实例 262
14.4 小结 266
第三篇 应用篇
第15章 输入输出体系 268
15.1 流的概念 268
15.1.1 C语言中I/O的弊端 268
15.1.2 流类 269
15.2 流对象和格式化输出 271
15.2.1 预定义的流对象 271
15.2.2 流格式化输出 272
15.3 重载流运算符 275
15.3.1 流运算符重载概述 275
15.3.2 插入运算符重载 276
15.3.3 提取运算符重载 277
15.4 文件操作 278
15.4.1 文件概述 278
15.4.2 文件操作基础 279
15.4.3 打开和关闭文件 279
15.4.4 文本文件输入输出 281
15.4.5 二进制文件输入输出 286
15.4.6 文件定位 288
15.5 本章实例 289
15.6 小结 297
第16章 异常处理 298
16.1 异常概述 298
16.1.1 异常的概念和分类 298
16.1.2 异常现象的举例 299
16.2 异常处理机制 299
16.2.1 异常处理的任务 300
16.2.2 异常处理基本思想 300
16.2.3 异常处理的组成 301
16.2.4 异常处理的执行过程 303
16.3 析构函数与异常处理 305
16.4 本章实例 307
16.5 小结 309
第17章 API编程和MFC框架简介 310
17.1 API编程介绍 310
17.1.1 认识API的编程 310
17.1.2 API函数的概念和作用 313
17.1.3 Windows API分类 314
17.1.4 Windows API基本术语 314
17.1.5 Windows API基本使用 316
17.2 MFC框架简介 318
17.2.1 认识MFC的程序 318
17.2.2 MFC的编程框架 319
17.2.3 MFC的模板 321
17.2.4 MDI应用程序的构成 321
17.3 小结 323
第18章 多线程处理 324
18.1 进程和线程 324
18.1.1 进程和线程的概念 324
18.1.2 线程的优先级 325
18.1.3 线程运行状态 325
18.2 线程的操作 326
18.2.1 线程的建立 326
18.2.2 线程的优先级设定 330
18.2.3 线程的挂起、恢复 330
18.2.4 线程的结束 332
18.3 本章实例 333
18.4 小结 335
第19章 链接库 336
19.1 链接库概述 336
19.2 静态链接库 337
19.2.1 静态链接库的编写 337
19.2.2 静态链接库的使用 339
19.3 动态链接库 340
19.3.1 DLL文件的编写 340
19.3.2 导出DLL资源 342
19.4 动态链接库的使用 345
19.4.1 隐式链接 345
19.4.2 显式链接 346
19.5 小结 348
第四篇 开发篇
第20章 基本算法 350
20.1 算法的概念和特征 350
20.1.1 算法的概念 350
20.1.2 算法的特征 350
20.1.3 算法的设计要求和描述方法 350
20.1.4 算法的衡量 351
20.2 常用算法 351
20.2.1 递推法 352
20.2.2 递归法 352
20.2.3 回溯法 353
20.2.4 贪婪法 354
20.2.5 分治法 355
20.2.6 动态规划法 356
20.2.7 迭代法 356
20.2.8 穷举法 357
20.3 小结 358
第21章 数据结构 359
21.1 线性表及其应用 359
21.2 链表及其应用 360
21.3 堆栈及其应用 362
21.4 队列及其应用 363
21.5 特殊矩阵、广义表及其应用 363
21.6 二叉树及其应用 364
21.7 散列结构及其应用 366
21.8 图及其应用 367
21.9 小结 368
第22章 数据库编程 369
22.1 概述 369
22.1.1 数据库和数据库系统 369
22.1.2 常见数据库访问技术 370
22.2 数据访问接口ODBC 371
22.2.1 ODBC概述 371
22.2.2 ODBC API编程 372
22.3 MFC的ODBC编程 375
22.3.1 CDatabase和CRecordSet类介绍 376
22.3.2 数据查询 378
22.3.3 参数化数据查询 379
22.3.4 新建数据 379
22.3.5 数据删除 380
22.3.6 数据更新 380
22.3.7 直接执行SQL语句 381
22.4 小结 381
第23章 网络编程 382
23.1 网络通信 382
23.1.1 网络类型 382
23.1.2 网络拓扑结构 382
23.2 网络通信协议 384
23.2.1 TCP/IP结构 384
23.2.2 UDP协议 385
23.2.3 相关术语 385
23.3 SOCKET网络编程接口 386
23.3.1 Socket模型 386
23.3.2 Socket的C/S编程方式 386
23.3.3 C++下的Socket 387
23.3.4 利用Socket建立服务器端程序 389
23.3.5 利用Socket建立客户端程序 391
23.4 小结 392
第24章 利用ADO实现简单的学生信息管理系统 393
24.1 ADO简介 393
24.1.1 ADO概述 393
24.1.2 MFC的ADO编程 394
24.1.3 ADO操作数据库的基本步骤 395
24.2 程序的需求 395
24.3 程序的界面设计 396
24.4 程序的数据库 396
24.5 核心程序实现分析 397
24.6 小结 400
第25章 火车信息查询系统 401
25.1 程序需求 401
25.2 程序界面 401
25.3 服务端程序 402
25.3.1 服务器通信类 402
25.3.2 建立处理线程 403
25.3.3 火车信息处理 404
25.3.4 发送和接收 405
25.4 客户端程序 406
25.4.1 连接服务器 406
25.4.2 发送车次信息 407
25.4.3 接收服务器返回信息 407
25.5 小结 408 |
| 本书适合C++初学者、具有一定C语言或者C++语言基础的中级学习者、学习C++的大中专院校的学生,同时也可以作为院校C++教学工作者的教学参考书。 | |