
本书基于Visual C++.NET 2008介绍了面向对象程序设计的原理、技术和方法,包括标准C++、托管扩展C++和C++ Windows窗体程序设计3个方面。主要内容有C++对C语言的扩展、类、对象、友元、继承、多态性、虚函数、重载、I/O流、模板、STL、异常、C++托管扩展程序设计、托管数据类型、值类型、引用类型、托管类、托管继承、委托、事件驱动程序设计、Windows程序的运行原理、C++.NET Windows窗体程序设计、窗体控件、对话框、菜单、工具条和C++.NET文件与流等内容。
本书取材新颖,内容翔实,案例丰富,条理明晰,实用性强。本书可作为高等院校的计算机、信息类、电子类专业及其他理工类相关专业的教材,也可作为C++.NET程序设计的自学者或程序设计人员的参考用书。
C++由C语言发展演变而来,兼具面向过程和面向对象程序设计语言的双重特征。程序代码具有简洁、灵活、高效和可移植性强等特点,适合编写运行于各种系统环境中的高性能代码,常被用来设计操作系统、设备驱动程序或其他需要在实时约束下直接操作硬件的软件。图形学、密码算法、科学计算和用户界面设计是使用C++较深入的领域,游戏、银行、贸易、保险业、网络程序、电话通信以及军事等诸多应用领域也常用C++设计其应用程序的核心代码,以求软件的最佳性能和效率。
无论从语言本身的实用性,还是从编程思想、代码效率和程序性能等方面来看,C++都是程序设计语言的典范。学好C++,不仅能够用于实际的程序设计,而且有助于理解程序设计技术的精髓,再学习诸如JAVA、C#之类的程序设计语言就简单了。
C++经历了较长的发展阶段,形成了几种不同版本的标准。其中ANSI和ISO联合标准化委员会于1998年颁布的C++规范,称为标准C++,它是当前使用最广泛的C++标准。支持C++程序设计的编译器很多,其中最常用的有C++ Builder、Visual C++6.0和Visual C++.NET等。Visual C++.NET在支持标准C++程序设计的同时,还对C++进行了托管扩展,增加了许多新特性和新功能,称为托管扩展C++。
本书主要介绍面向对象的C++程序设计,包括标准C++和托管C++程序设计,共12章,按其内容可分为三个部分。第1~8章为第一部分,主要介绍标准C++程序设计; 第9章为第二部分,主要介绍托管扩展C++程序设计和Windows事件驱动程序的基本原理和设计方法; 第10~12章为第三部分,主要介绍基于窗体的C++Windows图形用户界面程序设计和C++.NET文件管理。第一部分是基础,第二部分是拓展,第三部分是应用。三个部分紧密联系,逐次递进,引领读者理解面向对象程序设计的原理,掌握面向对象程序设计的方法,并最终应用面向对象的程序技术设计Windows应用程序。
第1章主要介绍程序设计语言的发展、面向对象程序设计的主要特征、Microsoft .NET的结构与内容、Visual Studio.NET 2008编程环境及在其中建立C++控制台应用程序的方法。
第2章介绍标准C++程序的结构、程序数据的格式化和输入输出,以及文件数据的读写。
第3章介绍C++对C语言非面向对象方面的扩充,主要包括指针、常量、引用、类型转换、函数重载、内联函数、作用域、命名空间以及C++预处理器。
第4~8章介绍C++面向对象程序设计的特征、原理和技术。包括类与对象、继承与派生、多态、运算符重载、模板与STL程序设计及异常处理等内容。
第9章介绍托管扩展C++程序设计。本章的内容是Microsoft公司对标准C++的扩展,它建立在前面各章节的理论基础之上,是对标准C++的进一步发展。主要包括.NET托管程序的结构和工作原理、托管数据类型、.NET命名空间及其应用、托管类、托管继承、属性、方法、委托和事件编程方法。
第10章介绍Windows程序设计的基本原理、消息循环与事件编程、Visual C++.NET应用程序类和窗体类、基于窗体的Windows图形用户界面程序设计、窗体设计器、事件处理程序设计等内容。本章是对第9章的进一步扩展,是C++面向对象编程技术的实际应用。
第11章介绍在窗体设计器中应用控件以可视化方式设计C++ Windows程序图形用户界面的方法。本章通过9个案例程序对窗体、菜单、工具栏、列表框、编辑框、标签、组合框、单选框和复选框等控件的常用属性、方法、事件及其编程方法进行了深入浅出的介绍。每个案例程序都是对前一个例程的扩展,示范了各类窗体控件的编程方法,最后通过菜单和工具栏将各例程所创建的窗体组装成了一个完整的Windows应用程序。在介绍Windows窗体控件编程方法的同时,展示了Windows图形用户界面应用程序的编程方法和过程。
第12章介绍.NET的文件管理系统。主要介绍了Microsoft.NET用于目录、路径和文件管理及文件读写方面的类。包括驱动器文件夹、路径和文件的创建及相关信息的查询、设置与获取,文本文件与二进制文件的创建和文件数据的读写方法。本章是面向对象应用程序设计的进一步深化,以案例方式介绍了在多窗体的Windows程序中,如何通过磁盘文件在不同窗体之间传递数据的方法,为设计大型Windows应用程序打下坚实的基础。
本书基于Visual C++ 2008介绍C++面向对象程序设计,书中的所有例程都在Visual Studio 2008编程环境中测试通过。选择这个版本的主要原因是它的窗体设计器支持可视化的C++程序设计(这个功能早在Visual C++ 2005版就有了),能够非常方便地设计出C++ Windows程序的图形用户界面。同时,该版本还对托管扩展C++的语法进行了大量的修改,去掉了以前版本中那些晦涩难懂的托管语法形式,简化了编程过程,使托管C++程序的设计方式与标准C++更加接近,程序代码更加清晰易懂。
本书覆盖了C++面向对象程序设计的基本概念、基本原理和基本技术,复合了C++教材和技术书籍的特点。既深透地介绍了C++面向对象的程序技术和原理,又清晰地示范了Windows平台下的C++程序实现方法。并针对学校教学的特点,精心设计了大量易于理解的案例程序和示意图,以此深入浅出地分析了C++面向对象程序设计的原理和各种技术,颇具启发性,有利于程序设计能力的培养与提高。
为了便于读者学习和教师教学,本书配有以下辅助资源:
书中例题的全部程序代码。
部分习题的程序代码。
PPT电子课件。
这些资源可从http://www.tup.tsinghua.edu.cn下载或发邮件到cqyddk@163.com索取。建议大家下载本书例程,并在阅读教材内容时执行对应例程,分析程序执行结果,然后适当修改例程,检查代码修改带来的程序结果的变化,巩固所学知识。
本书的编著是集体工作的结晶。王永、李昌兵、袁浩、张仿、曹慧英、罗龙艳、谢青、刘友军、武建军、何波、罗文龙等老师参与了本书编写大纲的制定,案例程序的设计与测试,书稿编辑和校审等工作。
在本书的编写过程中,得到了不少师长、学者、老师和同事的指导、支持和帮助。信息管理与信息系统专业1999级到2007级的学生在本课程的学习过程对C++的教学内容、教学课件和习题提出了许多良好的建议和修正意见,这些建议和意见是本书某些知识点、案例程序和习题的来源。在此向他们表示衷心的感谢!
在本书的编写过程中,编者阅读参考了国内外大量的C++书籍,这些书籍已被列在书后的参考文献中,在此谨向这些书籍的作者表示衷心感谢!
面向对象程序设计是一项不断发展变化的程序技术,C++更是博大精深,鉴于作者水平有限,经验不足,书中一定存在不少错误和不当之处,恳请专家、同行和读者批评指正。
Email: cqyddk@163.com。
编者
2008年12月12日
第1章C++ .NET面向对象程序设计概述
1.1程序设计语言的发展
1.2面向过程的程序设计
1.3面向对象的程序设计
1.4面向对象的程序设计语言
1.4.1类与对象
1.4.2数据抽象与封装
1.4.3继承性
1.4.4多态性
1.5C++与面向对象程序设计
1.6Microsoft.NET 与Visual C++
1.6.1.NET Framework
1.6.2Visual C++.NET
1.7第一个C++程序: Hellow C++
1.7.1Visual C++2008简介
1.7.2建立Hellow C++程序的解决方案
1.7.3在Hellow C++项目中添加源程序
习题
第2章数据输入与输出
2.1C++程序的结构
2.2流与标准输入输出设备
2.3cin和数据输入
2.3.1常规数据的输入
2.3.2空格及包括空白的长字符串的输入
2.4cout和数据输出
2.5输出格式控制符
2.6文件数据输入与输出
习题
第3章C++基础
3.1C++对C语言数据类型的扩展
3.2局部变量声明
3.3const常量
3.4命名空间
3.5指针
3.5.1指针概念的回顾
3.5.2指针与0
3.5.3指针与const
3.5.4void指针
3.5.5new和delete
3.6引用
3.7类型转换
3.7.1隐式类型转换
3.7.2显式类型转换
3.8函数
3.8.1函数原型
3.8.2函数默认参数
3.8.3引用参数
3.8.4返回引用
3.8.5函数与const
3.8.6函数重载
3.9内联函数
3.10预处理器
3.11作用域和生存期
3.11.1作用域
3.11.2变量类型及生存期
3.11.3变量初始化
3.11.4局部变量与函数返回地址
习题
第4章类与对象
4.1结构与类
4.1.1C++对结构的扩展
4.1.2访问权限
4.1.3类
4.2成员函数
4.2.1成员函数的定义
4.2.2常量成员函数
4.3类与封装
4.4对象
4.5构造函数与析构函数
4.5.1构造函数
4.5.2析构函数
4.5.3默认构造函数
4.5.4重载构造函数
4.5.5复制构造函数
4.5.6构造函数与对象定义
4.6构造函数与成员初始化列表
4.7静态成员
4.7.1静态数据成员
4.7.2静态成员函数
4.8this指针
4.9友元
4.10对象成员
4.11对象数组和对象指针
4.12向函数传递对象
4.13类的作用域和对象的生存期
4.14类的接口与实现的分离
4.14.1头文件
4.14.2源文件
4.14.3类的应用
习题
第5章继承
5.1继承的概念
5.2继承方式
5.2.1C++继承的形式
5.2.2公有继承
5.2.3私有继承
5.2.4保护继承
5.3基类与派生类的关系
5.3.1成员函数的重定义与名字隐藏
5.3.2访问基类成员
5.4构造函数和析构函数
5.4.1派生类构造函数的定义
5.4.2派生类构造函数和析构函数的调用次序
5.4.3构造函数和析构函数的构造规则
5.5多继承
5.5.1多继承的概念和应用
5.5.2多继承方式下的二义性
5.5.3多继承的构造函数与析构函数
5.6虚拟继承
5.6.1虚拟继承引入的原因
5.6.2虚拟继承的实现
5.7基类与派生类对象的关系
5.8继承与组合
习题
第6章多态性
6.1多态与联编
6.2函数重载
6.3运算符重载
6.3.1运算符重载的概念
6.3.2运算符重载的限制
6.3.3类外的运算符重载
6.4类运算符的重载
6.4.1类成员运算符重载
6.4.2类的友元运算符函数重载
6.5特殊运算符重载
6.5.1重载运算符++和--
6.5.2重载赋值运算符=
6.5.3重载[]
6.5.4类型转换
6.6输入输出运算符重载
6.6.1重载输出运算符
6.6.2重载输入运算符
6.6.3运算符<<和>>的重载应用
6.7虚函数
6.7.1虚函数的意义
6.7.2虚函数的特性
6.7.3虚析构函数
6.8虚函数的实现技术
6.9纯虚函数与抽象类
6.10运行时类型信息
6.10.1dynamic_cast
6.10.2typeid
6.11多态应用举例
习题
第7章模板与STL
7.1模板概念
7.2函数模板
7.2.1函数模板的定义
7.2.2函数模板的实例化
7.2.3模板参数
7.3类模板
7.3.1类模板的概念
7.3.2类模板的定义
7.3.3类模板的实例化
7.3.4类模板的使用
7.4STL
7.4.1容器
7.4.2迭代器
7.4.3关联式容器
7.4.4算法
习题
第8章异常
8.1异常处理概述
8.2异常处理基础
8.2.1异常处理的结构
8.2.2异常捕获
8.3异常与函数
8.3.1在函数中处理异常
8.3.2在函数调用中完成异常处理
8.4异常处理的几种特殊情况
8.5异常和类
8.5.1构造函数与异常
8.5.2异常类
8.5.3异常类继承
习题
第9章托管C++程序设计
9.1CLR与托管程序
9.2.NET托管数据类型
9.2.1值类型
9.2.2引用类型
9.2.3值类型与引用类型的转换: 装箱与拆箱
9.2.4MC++引用类型与托管堆
9.3.NET程序集与命名空间
9.3.1.NET程序集
9.3.2.NET 命名空间
9.4简单的MC++程序设计
9.4.1第一个托管程序: Hellow MC++ !
9.4.2MC++的数据类型
9.4.3基于控制台程序的数据输入与输出
9.4.4托管与非托管代码的混合编程
9.5托管类与托管结构
9.5.1值类型的结构与类
9.5.2引用类型的结构与类
9.5.3结构与类的属性
9.5.4运算符重载和静态构造函数
9.6托管继承
9.6.1托管继承与标准C++继承的区别
9.6.2虚函数与抽象类
9.6.3sealed类和sealed方法
9.6.4接口类
9.7托管数组
9.7.1一维托管数组
9.7.2二维托管数组
9.8委托与事件
9.8.1委托
9.8.2事件
习题
第10章Windows窗体程序设计
10.1Windows程序设计基础
10.1.1窗口
10.1.2消息
10.1.3消息循环
10.1.4Windows程序的构成
10.1.5Windows程序结构
10.1.6Windows程序的控制流程分析
10.2MFC和窗体程序设计概述
10.2.1MFC程序设计
10.2.2窗体概述
10.2.3MFC和窗体程序设计的比较
10.3Windows窗体程序设计
10.3.1窗体坐标
10.3.2窗体程序的手工设计过程
10.4Application类和Form类
10.4.1Application类
10.4.2Form类
10.5窗体设计器
10.5.1窗体设计器概述
10.5.2用窗体设计器创建窗体
10.6事件次序和输入焦点
10.7模式窗体和无模式窗体
习题
第11章窗体常用控件编程
11.1.NET控件基础
11.2标签控件、文本操作控件和命令按钮
11.2.1标签控件
11.2.2文本操作控件
11.2.3Button控件
11.3单选按钮和复选框
11.4容器控件
11.5列表框和组合框
11.6通用对话框
11.7菜单和工具条
11.7.1主菜单
11.7.2快捷菜单
11.7.3工具栏
11.8多文档界面应用程序
11.9没有介绍的窗体控件
习题
第12章.NET文件操作
12.1文件类型与System∷IO命名空间
12.2磁盘驱动器与路径
12.3与文件管理
12.3.1管理类
12.3.2磁盘文件管理类
12.4读写文件
12.4.1流
12.4.2文本文件
12.4.3二进制文件
习题
参考文献