本书以VisualStudio2010为开发环境,主要介绍了C++面向对象程序设计和Windows程序开发的技巧和方法。主要内容包括:C++语言基础,C++面向对象程序设计的类、对象、继承、重载、多态、虚函数和流等,对话框、菜单、工具栏和状态栏、常用控件、图形和文本处理、文档/视图、ADO数据库编程技术,以及学生信息管理系统项目开发实例。同时,本书每章配备了大量的例题、习题和实验题,并有项目开发案例,能帮助读者快速掌握VisualC++程序设计及其应用。本书通俗易懂,重点突出,注重实际应用,主要培养学生程序设计应用能力和项目开发综合能力。本书不仅可以作为高等院校计算机专业或相关专业的教材,也可作为用户的自学和参考书。为了方便教学,本书还配有教学课件等教学资源包,任课教师和学生可以登录“我们爱读书”网(www.ibook4us.com)免费注册并浏览,任课教师可以发邮件至hustpeiit@163.com免费索取。本书教学资源包中提供的源代码全部经过精心测试,能够在WindowsXP、Windows8系统下编译和运行。
编者通过多年C++面向对象程序设计教学实践和Visual C++项目开发经历,结合高校应用型人才培养教学模式,突出理论性、实践性,先进性,通俗性,精选案例,侧重以C++语言为基础,实现Windows应用程序开发为目标,培养学生项目开发的应用能力。
本书以Visual Studio 2010为开发环境。第1至3章介绍C++面向对象程序设计,第1章C++语言基础,第2章C++面向对象程序设计,第3章多态性与虚函数,选例完整,突出重点。第4至7章介绍Windows图形界面资源的创建和编程方法,重点介绍MFC应用程序的编程。第4章对话框,第5章菜单、工具栏和状态栏设计,第6章常用控件,第7章图形和文本处理。第8章文档/视图程序设计,让读者加深对Windows应用程序的来龙去脉的理解。第9章数据库应用及项目开发实例,设计思路清晰,设计过程完整,所有实例代码均调试通过。
本书各章提供了一定数量的习题和实验题,习题主要考查学生对基本知识点的理解程度;实验题是对能力的考查,要求学生具有一定的设计能力。实验题有完整的操作步骤和代码,便于学生掌握操作过程和代码编写。
本书不仅适合于教学,也适合于用Visual C++编程和开发应用程序的开发人员学习和参考。
本书在编写过程中得到了武昌理工学院信息工程学院魏绍炎教授指导,由武昌理工学院彭玉华和黄薇、武汉工程科技学院刘艳担任主编。武汉工程科技学院冯春华、武昌理工学院阳小兰和吴亮、青岛理工大学琴岛学院江连海担任副主编。其中第2、4、9章由彭玉华编写,第6章由黄薇编写,第7章由刘艳编写,第8章由冯春华编写,第1章由阳小兰编写,第3章由吴亮编写,第5章由江连海编写。高翠芬、赵永霞、温静、李娟、向紫欣、毛玲、谢文亮、陶枫、汪潇、朱逢园、曾秀莲、李婵飞、陈静为本书编写提供了不少素材。全书由彭玉华统稿。
为了方便教学,本书还配有教学课件等教学资源包,任课教师和学生可以登录“我们爱读书”网(www.ibook4us.com)免费注册并浏览,任课教师可以发邮件至hustpeiit 163.com免费索取。本书教学资源包中提供的源代码全部经过精心测试,能够在Windows XP、Windows 8系统下编译和运行。
在本书编写、修改过程中,作者参考了参考文献中列举的书籍及资料,在此向这些资料的作者表示诚挚的谢意!鉴于作者水平有限,书中难免有不当和错误之处,敬请广大读者批评、指正。
第1章C++语言基础(1)
1.1C++概述(1)
1.2C++的输入与输出(5)
1.3C++的函数(16)
1.4指针和引用(26)
1.5C++新增运算符(31)
1.6Visual Studio.NET 集成开发环境(34)习题1(36)
实验1学生成绩计算(41)第2章C++面向对象程序设计(43)
2.1类和对象(44)
2.2类的共享(61)
2.3类的继承和派生(69)习题2(87)
实验2使用面向对象方法实现学生成绩计算(94)第3章多态性与虚函数(103)
3.1类的多重继承(103)
3.2类的多态性(106)
3.3运算符的重载(111)
3.4模板(119)习题3(123)
实验3使用面向对象方法实现学生成绩计算(131)第4章对话框(138)
4.1MFC应用程序(138)
4.2对话框的使用(140)
4.3消息对话框(155)
4.4通用对话框(158)习题4(165)
实验4登录对话框(165)第5章菜单、工具栏和状态栏设计(169)
5.1菜单设计(169)
5.2工具栏(180)
5.3状态栏(184)
5.4菜单、工具栏和状态栏综合实例(187)习题5(190)
实验5菜单、工具栏和状态栏综合应用的单文档程序(191)第6章常用控件(193)
6.1控件概述(193)
6.2静态控件和按钮(196)
6.3编辑框和旋转按钮(201)
6.4列表框(209)
6.5组合框(215)
6.6滚动条(220)
6.7滑动条(225)
6.8进度条(229)
6.9日期时间控件、图像列表和标签控件(234)
6.10文件系统控件(242)习题6(245)
实验6常用控件使用(246)第7章图形和文本处理(252)
7.1图形设备接口概述(252)
7.2简单图形绘制(259)
7.3文本处理(263)
7.4图像处理(269)习题7(270)
实验7绘图对象使用(271)第8章文档/视图程序设计(276)
8.1文档/视图结构(276)
8.2文档和视图应用示例(287)习题8(291)
实验8文档/视图打印的应用程序(292)第9章数据库应用及项目开发实例(298)
9.1数据库应用技术概述(298)
9.2使用ADO访问数据库(299)
9.3学生信息管理系统项目开发实例(318)习题9(374)参考文献(375)
第2章C++面向对象程序设计
第2
章
C++面向对象程序设计
本章要点
■类和对象的概念
■构造函数和析构函数的定义及作用
■静态成员变量和静态成员函数
■友元函数和友元类
■派生类的定义
C++是一种面向对象的程序设计语言,与传统的面向过程的程序设计语言相比,C++引入了面向对象的程序设计方法。在面向对象的程序设计方法出现以前,程序设计一直采用面向过程的设计方法,要求程序设计人员必须全面考虑程序执行的每一个步骤和具体要求,如先做什么、后做什么、怎么做、如何做,面对的是程序的整个过程,并且在整个程序中,数据和处理数据的过程是分离的、相互独立的,当数据的结构发生局部改变时,整个程序中与其相关的处理过程也必须做相应的修改,程序的可重用性差,不适合编写现代大型应用程序。面向对象的程序设计方法与面向过程的程序设计方法不同的是,在认识问题、处理问题时,不再将问题实现的步骤放在首位考虑,而是将客观世界看作是由对象组成,向对象发送消息,将激活对象所具有的行为。这种被称为“对象”的事物就是所要处理的问题。
面向对象的程序设计方法是将任何事物都看成一个对象,每个对象都是由数据和处理数据的操作方法构成的。在程序设计时,将整个程序分解成多个能够完成独立功能的对象,将要处理的数据分别属于不同的对象,并封装在对象中,对象与对象之间可以通过消息进行通信,只要激发每个对象完成了相对独立的操作功能,整个程序就会自然完成全部操作。可以这样认为,面向对象程序设计注重对象的结果,忽略对象内部的具体过程。
面向对象的程序设计方法,模仿了客观世界中物体被组合在一起的方式,将人们习惯的思维和表达方式应用在程序设计中,从而使程序设计可以按照人们通常习惯的思维方式进行。使用这种设计方法,可以设计出安全可靠、易于理解、可重用性好的应用程序。
例如,处理一个关于学生成绩的问题。对象:学生;数据:姓名、年龄、分数、学号;消息:统计总分、平均分、排序。
对象、消息都可在面向对象方式的程序中体现为数值化形成。虽然“面向对象”这个名词是第一次出现,但事实上每个人原来就是以“面向对象”的方法认识、理解世界的。不管是自然界的万物还是各种虚拟的事物,都可被视为具有各种数值化属性,能产生各种不同行为的对象。
OOP的设计规则就是在程序中保留各种对象属性,规划出使用者与对象,以及对象与对象间的交互关系,来完成程序数据处理的功能,而不是只重视处理问题的步骤。
激发科学家们产生OOP原始动机就是在利用计算机来仿真模拟各种生物交互行为时所采用的方式。OOP认为:现实世界是由一系列彼此相关且能够相互通信的实体组成,这些实体就称为对象。
采用此方法设计时一般要经过三个步骤:
(1)确定对象,确定问题领域内所含的对象;
(2)将对象分类,按一定的层次关系组织、定义;
(3)表达、组织对象与外界的交互。
OOP风格的程序会弱化语句、操作序列的次序,强化模块化的外在表现。不管是有形的或无形的事物,只要可形容其状态、特征,都可视为对象。它创造了一种包装的结构,将程序要处理的事物的方方面面组合在一起,形成程序中的一个有意义的软件单元。所以,其程序具有抽象、封装、继承、多态的特征。
(1)抽象:将对象(程序要处理的事物)数值化。
(2)封装:将所有涉及该对象的数据、行为组合在一个软件单元(类)中。
(3)继承:通过某个软件单元的某些特征的再利用产生新对象。
(4)多态:同样的消息在不同对象中的响应不同。
采用这样的方式表达程序比较接近实际的对应关系,不易被算法所分隔,因此程序容易理解,结构较自然,比较容易维护,适合编写大型应用程序。
本章将首先介绍类和对象的有关定义,接着讲述类的共享、类的继承和派生。
2.1类和对象
在现实生活中,人们习惯将具有相同本质的事物划分成一类,这是人类在认识客观世界时习惯采用的思维方法。例如,当你看见一个人时,你之所以认为他是一个人,是因为他具有人类的外形、情感、语言等人类的本质特征,而不管他是什么人种、是男人还是女人、是老人还是儿童等。不难看出,人们将客观世界中的事物进行分类的基本方法是忽略事物的非本质特征(例如上述所说的人种、性别、年龄等),注意事物的本质特征(如上述所说的外形、情感、语言等),只要是本质特征相同的,就将这些事物划分为一类,属于同一类的事物应该具有相同的基本特征。所以说,具体的人就是人类的对象,人类就是人的类型。
面向对象的程序设计方法认为:对象是包含客观世界中某一事物特征的抽象实体,现实世界中的每一个事物都可以看成对象。从计算机的角度来看,一个对象应包括两个要素:数据和处理这些数据的操作方法。可以这样认为:对象是一个包含数据和处理这些数据方法的集合。C++中,对象的类型称为“类”(class),类集中体现了对象的特征和共性,是对象的抽象,是一种特殊的数据类型,对象是类的具体实例,是“类”类型的“变量”。对象和类是密切相关的,C++面向对象编程实质就是面向“类”类型变量编程。C++程序设计的重点应在类的定义实现上。
2.1.1类的定义
类就是OOP风格的程序所要反映的体现在程序中的软件单元。类是每一个OOP风格的程序不可缺少的成分,其作用是对数据进行封装、隐藏和处理。类之于C++就如同函数之于C语言。
函数是逻辑上相关的语句组合到一起,主要用于执行;而类则是逻辑上相关的函数及数据的集合,它的集成程度更高,主要不是用来执行,而是提供程序资源(数据和函数)。
面向对象程序设计中的类都具有以下两个属性:
(1)状态:数据成员;
(2)行为:函数成员表示能改变数据成员的操作。
借助这两者来抽象描述事物。
例如,以学生这个群体为例,当它成为程序要处理的事物或是问题所涉及的事物后,就会形成学生类:
状态:姓名、学号、年龄、身高。
行为:统计分数,按学号查询。
再例如,设计一程序对电梯的运行进行控制的电梯类:
状态:速度、载客数、楼层号。
行为:楼层选择、计算人数、上下驱动。
面向对象程序设计中的“类”正是抽象出对象的共性而形成的,它为属于该类的对象提供了抽象的描述。