本书是C++程序设计在科学与工程计算方面最具权威性的技术指南之一,系统地阐述了C++语言中面向对象的程序设计和开发、C++语言的基本特点和语法。全书采用了大量的实例帮助读者学会使用C++语言和面向对象的编程方式去开发更高质量的程序,并且较充分地反映了面向对象程序设计的现状和发展趋势。本书分为三部分,包括基础知识、公共性表述及技术应用。
第一部分 基础知识
第1章 引言
1.1 面向对象编程
1.2 为什么选择C++
1.3 关于C++
1.4 程序设计
1.5 组织结构
1.6 源代码
1.7 联系作者
1.8 注释与说明
1.9 练习
第2章 FORTRAN基础
2.1 第一个程序
2.2 变量、对象和数据类型
2.3 C++的基本类型和运算
2.4 输入和输出
2.5 运算符的优先级和结合规则
2.6 if语句
2.7 循环
2.8 声明
2.9 数组
2.10 指针
2.11 指针和数组
2.12 常量指针和指向常量的指针
2.13 运行时数组的大小
2.14 字符串
2.15 引用
2.16 函数
2.17 注释与说明
2.18 练习
第3章 C语言基础
3.1 第一个程序
3.2 变量、对象和类型
3.3 C++的内置类型和操作
3.4 运算符的优先级和结合规则
3.5 输入和输出
3.6 声明
3.7 指针
3.8 内存管理
3.9 引用
3.10 函数
3.11 注释与说明
3.12 练习
第4章 类
4.1 两个简单的类
4.2 数组类
4.3 类模板
4.4 函数模板
4.5 异常
4.6 嵌套类
4.7 C++程序概述
4.8 注释与说明
4.9 练习
第5章 函数
5.1 声明和定义
5.2 函数声明
5.3 函数参数
5.4 函数返回值类型
5.5 重载函数
5.6 函数模板
5.7 注释与说明
5.8 练习
第6章 函数和类
6.1 成员函数和重载
6.2 初始化
6.3 复制
6.4 转换
6.5 运算符函数
6.6 赋值
6.7 特殊运算符
6.8 析构
6.9 静态成员函数
6.10 友元函数
6.11 类的输入/输出运算符
6.12 注释与说明
6.13 练习
第7章 对象生存期与内存管理
7.1 对象的生存周期
7.2 对象生存期
7.3 静态对象
7.4 自动对象
7.5 动态对象
7.6 避免悬空引用和垃圾
7.7 注释与说明
7.8 练习
第8章 示例程序
8.1 问题: 表示网状结构
8.2 方案一: 数组
8.3 抽象和封装
8.4 方案二: 引进类
8.5 方案三: 信息隐藏
8.6 注释与说明
8.7 练习
第二部分 共性的描述
第9章 公共行为表述
9.1 示例: 仪表控制
9.2 类和对象
9.3 接口与接口类型
9.4 对象和类的图形描述
9.5 对象的创建以及接口的使用
9.6 接口基类
9.7 复合接口
9.8 作为组件的接口
9.9 创建并利用接口数组
9.10 异常和接口
9.11 小结
9.12 注释与说明
9.13 练习
第10章 公共数据实现表述
10.1 利用公用继承扩展
10.2 利用公用继承的接口扩展
10.3 公用继承存在的问题
10.4 成员函数前推
10.5 用于实现的私有继承
10.6 继承机制
10.7 基类合成
10.8 类声明的作用
10.9 小结
10.10 注释与说明
10.11 练习
第11章 通用结构描述
11.1 由模板表述的公共性
11.2 模板与继承
11.3 示例: 数组类
11.4 接口数组类
11.5 全局 函数模板
11.6 小结
11.7 注释与说明
11.8 练习
第12章 类型
12.1 类型的基本概念
12.2 类型和接口
12.3 类型转换
12.4 类型信息的失去
12.5 类型和类模板
12.6 受限的模板扩展
12.7 函灵敏结构种类
12.8 小结
12.9 注释与说明
12.10 练习
第三部分 技术应用
第13章 数组
13.1 使用具体数组
13.2 具体数组
13.3 具体数组引用
13.4 具体数组投影
13.5 接口数组
13.6 接口数组的设影
13.7 迭代器
13.8 小结
13.9 注释与说明
13.10 练习
第14章 指针类
14.1 指针的使用
14.2 引用聚集
14.3 程序员定义的指针类
14.4 对象复制指针
14.5 对象计数指针
14.6 使用对象计数指针
14.7 接口指针类
14.8 小结
14.9 注释与说明
14.10 练习
第15章 类的代码结构
15.1 LAPACK的结构
15.2 数据和函数的封装
15.3 运行时失败的不确定类型
15.4 公共结构的表示
15.5 小结
15.6 注释与说明
15.7 练习
第16章 代数结构类别
16.1 代数结构
16.2 示例: 复数浮点型
16.3 一个集合、单目运算的结构类别
16.4 两个集合的结构类别
16.5 示例: 量纲分析
16.6 示例: 数组的运算
16.7 小结
16.8 注释与说明
16.9 练习
第17章 函数对象
17.1 函数指针
17.2 成员函数指针
17.3 函数对象
17.4 函数接口类别
17.5 延迟求值的函数对象
17.6 示例: 一个简单的函数求值器
17.7 集合函数
17.8 小结
17.9 注释与说明
17.10 练习
第18章 重用已有库
18.1 C程序的运行
18.2 示例: String类
18.3 FORTRAN程序的运行
18.4 开发在FORTRAN包装程序中的命名共性
18.5 压缩数组的表示
18.6 用BLAS实现矩阵
18.7 LAPACK奇异值分解
18.8 小结
18.9 注释与说明
18.10 练习
第19章 C++数据建模
19.1 介绍
19.2 用于试验数据的类
19.3 线性化的非线性议程类
19.4 自动派生类
19.5 示例: 非线性议程的迭代解决方案
19.6 用于阻尼SDV方程的类
19.7 main()程序
19.8 小结
19.9 注释与说明
19.10 练习
参考文献
与许多科学家和工程师做的工作类似,我们的许多工作都涉及编写计算机程序。近年来,我们一直在使用c++编程,用这种语言编写的程序比以往用其他语言编写的程序更加优秀,而且可以更好地进行科学和工程研究。我们认为读者也应该尝试学习和使用c++,为此编写了本书来帮助读者入门。
C++是几种较新的采用面向对象程序设计方式的编程语言之一。与其他科学和工程研究一样,为了编写具有正确性、可读性、可修改性、可重用性和有效性的大型程序,我们也需要具有创造力和坚持不懈的努力。包括FORTRAN语言和C语言在内的传统编程语言使我们与计算机交流的方式过于简单。C++语言和面向对象的编程方式则将这种交流方式提升到了一个较为抽象的水平:它们能根据已有的编程方案提供智能化的模块去开发更高质量的程序,从而进行高质量的科学和工程研究。
学习C++将会是一件令人兴奋的事。尽管在FORTRAN,PASCAL和C语言中使用的大部分编程概念仍继续适用于面向对象的编程,但新出现的概念改变了整个工作。像所有的新领域一样,对我们来说面向对象编程似乎很陌生。C++语言将多年来从实际经验中得到的计算机新思想具体化了,而这些新思想会激发读者去重新思考编程及它在工作中所承担的角色。希望读者能像我们一样,发现程序设计不再是一件虽十分吸引人但却很枯燥的工作,而是一项能够跟其他科学研究和工程技术工作相媲美的智力活动。
目的
我们希望读者能通过本书的学习,学会使用C++语言和面向对象的编程方式去开发更高质量的程序,尤其是科学和工程上的程序。FORTRAN或C语言可能适合于编写纯数字计算的小规模程序,但是对于大型程序和涉及许多非数字代码的程序来说,用FORTRAN语言编写的程序是很难理解、校正和改进的。正是基于以上原因我们提出了面向对象的程序设计,而C++语言正是能有效使用面向对象方式的编程语言。如果读者仍使用FORTRAN语言或C语言编写程序,希望这本书能够引领你进入C++面向对象程序设计的新世界。
适用读者
本书通过介绍C十+语言教授读者学习面向对象编程,并列举了大量的科学和工程实例。它既不是一本关于科学计算或数值分析的书,也不是一本单纯介绍编程的书。书中简单地介绍了C十+的基本特点和语法,因为这些对于有编程经验的科学工作者或工程师及任何有实际经验的程序员都是熟知的。这里的目的不仅仅是介绍语法和规则,而是详细地阐述C++语言中对面向对象编程有深远意义和重要影响的思想和技术。本书的后面介绍了已经应用于实际的一些思想和技术,这些例子主要来自于科学和工程中,但却是可以广泛应用的。
我们希望本书能给以下三类读者提供帮助:
●熟练掌握FORTRAN语言或C语言的工程师和科学工作者。
●熟练掌握C或C++的专职程序员。
●致力于将有用的高级实例变成科学和工程编程基础的C++程序员。
除了有经验的编程人员外,本书也适用于有较好数学功底的工程技术专业的本科生。
不管读者的知识背景如何,学习C++和面向对象编程都将是一种挑战。但希望读者能获得这种挑战所带来的成就感和回报。我们相信一旦读者理解了c++和面向对象编程,就会拓展出一个更广阔的发展空间。