C++语言程序设计
作者 : 王立柱 编著
出版日期 : 2012-07-06
ISBN : 978-7-111-38740-4
定价 : 29.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 195
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书在C语言基础上介绍C++语言基础知识和程序设计方法。全书共分14章,内容包括:C语言主要内容回顾,顺序表,结构串,基本内容从C到C++,从顺序表到顺序表类,从结构串到类串,Date类,继承和动态绑定,函数模板和向量类模板,链表类模板和适配器,C++的I/O流库,C++综合设计实例,命名空间。

图书特色

C++语言程序设计
王立柱 编著
培养程序设计能力是一项系统的工程。作者以逻辑方法进行了长期的程序设计类课程的教学实践,收效显著,并将其心得融入本书中。本书以程序设计的发展过程为对象,以程序设计的基本矛盾运动为主线,以程序设计的需要为原则,用程序设计的实例来贯穿,使读者以哲学的眼光理解程序设计,更高效地提升程序设计能力。
本书特点:
承上启下。从需要出发,通过典型问题的出现和解决讲解C++的概念,知识点环环相扣。
实用性强。以典型设计实例贯穿全书,使读者深入理解面向对象程序设计方法。
多媒体软件既助教又助学。配套的多媒体教学软件使结构、算法、代码、运行过程和结果综合展现,数据自动输入、运行过程步步跟踪。

图书前言

平凡中的非凡
  辩证逻辑和旧的纯粹的形式逻辑相反,不像后者满足于把各种思维运动形式,即各种不同的判断和推理的形式列举出来和毫无关联地排列起来。相反地,辩证逻辑由此及彼地推出这些形式,不把它们互相平列起来,而使它们互相隶属,从低级形式发展出高级形式。
—恩格斯
一、“人体解剖”的方法
  C++的主要内容包括两部分,一部分是C和C++的公共子集,另一部分是C++直接支持的高级部分。公共子集主要包括基本类型、指针、数组、结构、函数和C风格字符串。高级部分则包括类、继承和动态绑定、函数模板、类模板和STL(String、Vector和List等)。从公共子集到高级部分,蕴含着程序设计风格从过程化程序设计到数据抽象,从面向对象程序设计到泛型程序设计的发展。
  C++是从C扩展类型开始的,它的每一步演化和发展都是由这个扩展中的实际问题所引起的。因此,Stroustrup指出:“C++支持一种逐步推进的学习方式。你学习一个新语言的方式依赖于你已经知道些什么,还依赖于你的学习目的。”
  本书的目的是让读者掌握C++的演化和发展规律,“已经知道”的是C,“逐步推进的学习方式”是从自定义类型的C描述到C++描述。本书的特点是:分析各种概念,注意概念的隶属关系,建立概念的连锁,不让其中缺少一个环节,而且使整个连锁有一组大家熟悉的典型程序设计作根据。这是一种逻辑方式,也是马克思提倡的“人体解剖”方式。我们知道,事物的本质只有在它发展到一定阶段的时候才能清晰地显露出来,于是,这一清晰的本质就是一把钥匙,借此,我们可以对整个发展过程重新做出合乎逻辑的描述,展示出其内在规律性。黑格尔形容这种方式是“密涅瓦的猫头鹰从黄昏起飞”。在马克思看来,这种逻辑方式不过是摆脱历史的形式以及起扰乱作用的偶然性,按照现实的历史过程本身的规律进行修正,因而具有逻辑上前后一贯的形式,使每一个要素可以在它完全成熟并且具有典型性的发展点上加以考察。如果把C看做不成熟的“猴体”,把C++看做成熟的“人体”,那么马克思认为“人体解剖对于猴类解剖是一把钥匙”。
  Bruce Eckel在他的《C++编程思想》一书中就探索了这种逻辑方式:他先用C语言实现一个顺序表,然后再转换为C++类。顺序表便是那种“完全成熟并具有典型性的发展点”。显然,这种逻辑方式下的C已不是传统的、由不了解C++的人来讲授的、只为应试等级考试的C,而是从C++的高度来修正的、按照从C到C++的发展规律和人的认知规律来描述的C。
  本书把STL的String、Vector和List作为C++发展中的成熟点,实现了从C到C++的无缝连接,其整体框架如下:
  1)用C描述顺序表、链表和结构串。
  2)具体分析用C描述顺序表和结构串时暴露出来的C局限。
  3)针对性地引入C++基本概念来克服上述局限性。
  4)把C描述顺序表和结构串转化为C++描述。
  5)实现String、Vector和List。
二、本书的脉络
  为了阐述从C到C++的发展,并使其具有逻辑上前后一贯的形式,本书以程序设计的基本矛盾为主线,把解决实际问题作为动机,用程序设计的典型实例来贯穿。 
  什么是程序?程序是在某种存储模式上实现的算法,即程序=存储模式+算法。所谓存储模式是指数据和对数据的基本运算或基本操作的存在形式。所谓算法是指可以用基本运算或基本操作来表示的问题求解的有穷序列。算法好比一台机器,构造再复杂,也不过是简单机械动作的重复。最先提出这个思想的人是图灵,他认为,应该用机器保留一些最简单的操作,然后将一个复杂的计算分解为这些操作。冯·诺依曼用固化在硬件中的机器指令表示简单操作。这些机器指令的集合构成的系统成为第一个程序语言—机器语言。从此,存储模式都用程序语言来表示,程序也就成为用某种程序语言实现的算法。例如,机器语言程序、C语言程序、C++语言程序、Java语言程序等。
  什么是程序设计?程序设计也是程序设计方法,它是关于存储和算法的关系和发展的科学。“纵观短暂的计算机发展史,存储和算法这两个方面一直存在,发展演化的只是它们之间的关系,这个关系就是程序设计方法”。
  存储和算法是一对矛盾。存储为了算法,算法离不开存储。但是存储相对稳定,制约着算法的自由发展,而算法则越来越复杂,要求存储不断改进。矛盾推动了程序设计的持续发展。我们的理论正是对这种发展过程的阐明。而一切发展,不管其内容如何,都可以看作一系列不同的发展阶段,它们以一个否定另一个的方式彼此联系着。这里的否定不是消灭,而是扬弃,是后者克服前者中消极的东西,保留和继承积极的东西,并把它发展到新的阶段。
  本书的内容安排如下(见下图):
  第1章引入指针和数组处理一组逻辑上具有前后顺序的数据,以弥补基本固有类型的不足;引入函数处理更复杂的数据,它是对运算符的推广;字符串是综合应用指针和函数而创立的第一个带有可自定义基本运算函数的存储模式即自定义类型。
  第2章创建顺序表,以弥补数组的不足。
  第3章创建单向链表,以弥补顺序表的不足。
  第4章创建结构串,以弥补字符串的不足。
  第5章引入C++基本知识,以解决顺序表和结构串中的C语言局限性。
  第6章把顺序表转化为顺序表类。
  第7章把结构串转化为类串。
  第8章把Date结构转化为Date类。
  第9章介绍类与类的继承发展的技术—继承和动态绑定。
  第10章创建向量类模板Vector,改进顺序表类。
  第11章创建链表类模板改进单向链表。
  第12章把C文件转化为C++文件。
  第13章综合运用上述知识,编写中缀表达式求值和事件驱动模拟程序。
  第14章介绍防止命名空间污染的方法—采用命名空间。
三、教学经验和体会—平凡中的非凡
  1. 注重规律和方法
  C++的出现和发展不是聪明人苦思冥想的结果,而是程序设计的发展过程使然,我们的逻辑方法正是以这个过程为研究对象。每一个学生,只要经历这个过程,都可以深切地感受到C++产生的必然性,从而认识到积累与创新的正确关系,这对培养学生的学习兴趣、树立学生的学习自信心、提高学生的科学态度和素质都是至关重要的。
  这种方法在中学是学不到的。作为大学教师,不要仅仅从实用的角度或仅仅为了应试来讲授程序设计,这会使课程支离破碎,只剩雕虫小技。相反,要讲逻辑,注重整体,前后一致地讲授知识,促进学生从中学到大学的转变,使他们时刻感觉到自己是在真正地上大学,有做大学生的自豪感,这是大学教师的义务、责任和价值。
  我们之所以欣赏计算机的美,不只是因为它具有令人感叹的人类智慧的美,更是因为计算机是建立在程序设计之上,而学生通过比较全面而深刻地认识程序设计的发展规律,能够挖掘出自己的潜能,最终欣赏到自身的美。
  2. 因材施教
  本书如果作为计算机专业教材,总学时数不少于80,那么每一章都应该讲。
  本书如果作为非计算机专业的必修课教材,总学时数不少于60,那么第12章可以简单讲,第13章和第14章可以不讲,仅要求自学。
  3. 多媒体教学
  本书有配套的多媒体软件,既助学又助教,使结构、算法、代码、运行过程和结果同时展现、数据自由输入、运行过程步步跟踪。它适应了传媒时代的要求,扩展了学生自主学习的空间,解决了算法复杂抽象、学生难以理解、教师难以讲解的难题,加强了师生的切磋交流,为教师前后横向对比、全面具体、综合系统、深刻展示思想方法地授课搭建了平台。本书配套的光盘中包括学生用助学软件、教师用教学软件以及源代码,方便学生学习及教师教学。另外,该多媒体软件是基于Authorware应用软件的编程特性开发的,本身就要求开发者有很好的程序设计基础和综合能力,它时时彰显着学习程序设计的意义(如下图所示)。
  4. 考试
  考试要突出整体性,树立学生的全局观和发展观,切忌偏题、编造题。本书章后的习题都是考试的参考题型。
四、致谢
  感谢武警后勤学院贾冬梅老师,她参与了本书的校对,不仅指出很多文字上的错误,而且提出不少建设性的意见。
  感谢天津师范大学的刘志红老师,她不仅是课程改革团队的主要成员、教学课件的制作者、课程的主讲教师,而且十年来,她的学生评教成绩一直很优秀。我们所遵循的逻辑方式不仅经过她的教学实践证明是普遍受学生欢迎的,而且也通过她的实践得到不断完善。

上架指导

计算机\程序设计

封底文字

培养程序设计能力是一项系统的工程。作者以逻辑方法进行了长期的程序设计类课程的教学实践,收效显著,并将其心得融入本书中。本书以程序设计的发展过程为对象,以程序设计的基本矛盾运动为主线,以程序设计的需要为原则,用程序设计的实例来贯穿,使读者以哲学的眼光理解程序设计,更高效地提升程序设计能力。
本书特点:
 注重规律。按照程序设计方法的连续发展阶段而编写。
 承上启下。在C语言基础上,从需要出发,通过典型问题的出现和解决讲解C++的概念,环环相扣地实现从C到C++的平滑过渡。
 实用性强。以典型设计实例贯穿全书,程序设计风格从过程化到面向对象再到泛型循序渐进。
 多媒体软件既助教又助学。配套的多媒体教学软件使结构、算法、代码、运行过程和结果综合展现,数据自动输入、运行过程步步跟踪。

多媒体助学软件示意图   多媒体教学软件示意图
(这两个图同《C语言程序设计》一书,书号978-7-111-34972-3 )

图书目录

出版者的话
编委会
丛书序言
前言
教学建议

第1章  C语言回顾 1
1.1  指针和数组 1
1.1.1  指针 1
1.1.2  数组 7
1.2  函数 10
1.2.1  函数定义与调用 10
1.2.2  值传递和指针传递 13
1.2.3  返回值和指针传递 14
1.2.4  函数声明(原型) 14
1.3  const限定修饰符 15
1.3.1  const型变量 15
1.3.2  间接const型指针和参数 16
1.3.3  const型指针 17
1.3.4  全const型指针 17
1.4  字符串 18
1.4.1  字符串常量和字符串赋值 18
1.4.2  字符串基本操作函数声明 20
1.5  条件编译命令和文件包含命令 21
1.5.1  条件编译命令 21
1.5.2  文件包含命令 22
1.5.3  应用举例 23
习题 25
第2章  C顺序表 26
2.1  顺序表 26
2.2  顺序表基本运算的实现 28
2.3  删除顺序表重复数据 32
2.4  数据抽象和准封装 33
习题 35
第3章  C单向链表 36
3.1  单向链表 36
3.2  单向链表基本运算的实现 38
3.3  逆置 42
习题 44
第4章  C结构串 45
4.1  String结构 45
4.2  String结构基本运算的实现 47
4.2.1  准构造函数和准析构函数 47
4.2.2  转换赋值 48
4.2.3  复制赋值 49
4.2.4  串连接 49
4.2.5  子串插入 50
4.2.6  子串删除 52
4.2.7  求子串 54
4.2.8  其他 55
4.3  模式匹配 56
习题 58
第5章  从C到C++的基本内容 59
5.1  C语言本身的问题 59
5.2  变量和类型 61
5.3  输入/输出 63
5.4  内联函数 65
5.5  运算符重载 66
5.6  函数重载 67
5.7  引用型 69
5.7.1  概念的由来 69
5.7.2  引用型的定义和使用 71
5.8  提取符和插入符重载 74
5.9  默认参数 75
5.10  new和delete运算符 76
习题 76
第6章  从顺序表到顺序表类 78
6.1  顺序表和顺序表类 78
6.2  顺序表类基本运算的实现 82
6.3  增加的成员函数 82
6.3.1  复制构造函数 83
6.3.2  复制赋值运算符重载 83
6.3.3  下标运算符重载 85
6.4  构造函数与初始化 85
6.5  new和delete运算符与构造和析构 86
6.6  类定义 86
习题 87
第7章  从String结构到String类 88
7.1  String类的声明 88
7.2  String类成员函数的实现 90
7.2.1  构造和析构 90
7.2.2  成员赋值运算符 92
7.2.3  成员转换 94
7.2.4  串连接 95
7.2.5  关系运算 98
7.2.6  求子串 98
7.2.7  子串插入 99
7.2.8  子串删除 100
7.2.9  下标运算符 100
7.2.10  字符查找 102
7.2.11  输入/输出 102
7.3  深入讨论 104
7.3.1  转换赋值运算符函数的替代 104
7.3.2  成员函数“类串+C串”的替代 104
7.3.3  explicit修饰符 105
习题 106
第8章  Date类 107
8.1  Date类的声明 107
8.2  Data类基本运算的实现 110
8.3  深入讨论 113
8.3.1  转换赋值成员函数的替代 113
8.3.2  静态数据成员和静态函数成员 113
习题 115
第9章  继承和动态绑定 116
9.1  参数初始化表 116
9.2  继承和受保护成员 118
9.2.1  继承 118
9.2.2  受保护成员 120
9.3  多态性和虚函数 120
9.4  虚析构函数 123
9.5  纯虚函数和抽象类 124
习题 126
第10章  函数模板和类模板 128
10.1  函数模板 128
10.2  顺序表类模板 130
10.3  向量类模板Vector 132
10.3.1  Vector定义 132
10.3.2  通用算法和迭代器 135
10.3.3  Vector的插入和删除函数 138
10.3.4  求素数 139
10.4  函数对象 140
10.5  深入讨论—函数模板实例化中
的问题 141
习题 142
第11章  链表类模板和适配器 144
11.1  链表类模板List 144
11.2  适配器 151
习题 152
第12章  C++的I/O流库 153
12.1  格式化输入/输出 154
12.1.1  设置流的格式化标志 154
12.1.2  格式化输出函数 155
12.1.3  操作算子 156
12.2  文件使用方式 158
12.3  字符读写函数 159
12.4  字符串读写函数 160
12.5  无格式读写函数 160
12.6  随机访问 162
12.7  文件错误处理 163
习题 163
第13章  C++综合设计实例 164
13.1  中缀表达式求值 164
13.2  事件驱动模拟 168
习题 175
第14章  命名空间 176
14.1  命名空间的定义 176
14.2  using namespace语句 177
14.3  命名空间的成员 178
14.4  命名空间的别名 179
习题 180
参考文献 181

教学资源推荐
作者: (美)William Stallings 著
作者: 张建忠 徐敬东 编著
作者: 吴国伟 徐子川 姚琳 编著 郭禾 主审
参考读物推荐
作者: (美)David Meerman Scott 著
作者: 诺伯特.韦尔蒂(Norbert Welti)