实验指导书-面向对象程序设计-电子信息工程专业(实)-邓涛编.doc_第1页
实验指导书-面向对象程序设计-电子信息工程专业(实)-邓涛编.doc_第2页
实验指导书-面向对象程序设计-电子信息工程专业(实)-邓涛编.doc_第3页
实验指导书-面向对象程序设计-电子信息工程专业(实)-邓涛编.doc_第4页
实验指导书-面向对象程序设计-电子信息工程专业(实)-邓涛编.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计实 验 指 导 书邓 涛 编 写适用专业: 电子信息工程专业(实)信息与通信工程学院 2011年 5月前 言面向对象程序设计是电子信息实验班的一门必修的程序设计课程,实验是面向对象程序设计课程教学的重要教学环节,是真正掌握面向对象程序设计的最有效方法。实践教学的目的是为了增强学生的学习兴趣,使学生深入领会C+语言的功能和作用,理解程序的编译、运行机理,加深对C+语言面向对象本质的认识。通过运用C+语言编写程序,掌握调试运行程序的方法,从而具备较好的程序设计能力和解决问题的能力,并积累一定的实践经验,为今后在专业领域中使用计算机解决问题打下扎实基础。课程实验的总体目标是使学生拥有必要的程序设计实践经验,掌握最基本的程序设计方法和技巧,熟练掌握C+的语法,了解和熟悉常用的软件集成开发环境,掌握基本的编译、链接和调试技能,同时培养学生良好的代码写作习惯与风格。实验项目设置与内容提要根据各专业培养计划,面向对象程序设计课程的实验学时一共安排了24学时。本课程实验开设3个必修实验(10学时),其他为14学时的任选实验,在任选实验时,根据学生掌握知识的程度选做。实验项目设置与内容提要序号实验项目实验学时每组人数实验类型实验要求内 容 提 要1VC集成开发环境的安装与使用21验证任选1、 Visual Studio 6.0的介绍2、 Visual Studio 6.0的安装3、 MSDN的介绍与安装4、 什么是Visual Studio 6.0 Service Pack 6?5、 Visual Studio安装程序安装了哪些内容?6、 如何在Visual Studio 6.0中编译和链接和运行程序2编译及语法错误处理41综合必修1、 认识VC中的编译器及其选项2、 VC中新建向导与编译器选项的自动设定3、 何时可以编译4、 分别编译5、 语法错误的处理6、 常见语法错误3链接及链接错误处理41综合必修1、 链接器的作用2、 二进制代码文件格式3、 理解链接过程4、 链接器的选项及选项的自动设定5、 库文件和目标文件的指定链接6、 常见链接错误4复数类的设计与实现21综合必修1、 类的定义2、 类的成员函数的定义3、 复数的加减乘除运算符重载4、 友元函数与输入与输出运算符重载5输入输出流21综合任选1、 输入输出流、文件流类的使用2、 文件的打开、读写和关闭操作6对话框和控件41综合任选1、基于对话框的应用程序的创建;2、静态文本控件、进度指示器控件、滑动条控件、微调按钮控件、列表控件、树状控件的应用7菜单和文档视图结构及简单绘图程序的设计61设计任选1、 单文档与多文档应用程序的创建2、 菜单的添加与函数响应3、 工具条的添加与函数响应4、 简单绘图操作的实现5、 画笔、画刷的应用6、 数据串行化目 录实验一 VC集成开发环境的安装与使用6实验二 编译及语法错误处理18实验三 链接及链接错误处理26实验四 复数类的设计与实现35实验五 输入输出流37实验六 对话框和控件39实验七 菜单和文档视图结构及简单绘图程序的设计41实验一 VC集成开发环境的安装与使用实验学时:2实验类型:验证实验要求:任选一、实验目的本实验作为课程配套实验的第一个实验,旨在解决学生在建立开发环境中可能遇到的疑惑,帮助学生注意和学习到在书本上没有的背景知识,提示学生在环境建立过程中的细节,熟悉C+程序的基本编译和链接过程。 二、预习内容Visual Studio是微软公司为Windows程序员设计的开发套件,用户可以在其中轻松的完成创建项目、编辑源程序、编译、链接、运行和调试应用程序。(一) Visual Studio 6.0的介绍1987年,Borland公司,Turbo C for DOS 1.0。1989年,Turbo C for DOS 2.0。1990年,第一个Borland C+发布。 1990年,Microsoft C+ 6.0。1992年,Borland C+ 3.1 for DOS。1992年,第一个Microsoft C+即Visual C+ 1.0发布,含MFC 2.0。1997年,Borland C+ 5.0。1997年,Borland C+ Builder 1.0。1997年,Visual Studio 5.0,其中包括Visual C+ 5.0(MFC 4.2)。1998年,Visual Studio 6.0,其中包括Visual C+ 6.0(MFC 6.0)。1998年,Borland C+ Builder 3.0。2002年,Visual Studio .NET 2002,其中包括Visual C+ 7.0。2002年,Borland C+ Builder 6.0。2003年,Visual Studio .NET 2003。2005年,Visual Studio 2005,其中包括Visual C+ 8.0。2008年,Visual Studio 2008。Visual Studio 6.0是微软公司继Visual Studio 4.2和Visual Studio 5.0(1997年发布)之后发布的极具影响力的开发工具,下表是Borland公司和微软公司C/C+主要编译开发环境的发布时间。值得一提的是Visual C+ 2005 express。微软公司在其发布Visual Studio 2005时,为了让更多的学生能学习和使用Visual Studio 2005(从而最终为Windows操作系统编写应用程序),决定推出一个专为学生发布的、完全免费的可视化集成开发环境Visual Studio 2005 的express版(另外还有专业版、Team版和服务器版等)。Express版的Visual C+2005与其它版相比有不少限制(主要是不包含MFC),但作为学生学习C/C+程序却是非常合适的。任何人都可以从/express/download/下载这个集成开发环境。在最新发布的Visual Studio 2008中微软公司也同样发布了express版,因此在上面的链接中可能下载到的是最新的Visual Studio 2008 express。(二) Visual Studio 6.0的安装首先Visual Studio 6是一个套件,也即是说它与微软的office相似,office套件是同时包括word、powerpoint、excel、access、outlook、frontpage等多个应用软件的,Visual Studio 6 则同时包括VC、VF、VB、VID(Visual InterDev,用来作网络应用开发的)、VSS(Visual SourceSafe,用来管理软件开发源代码的)。因此如果想安装VB6或VF6的话,也可以用Visual Studio 6的内容来安装。VC6的安装是很简单的,但要安装得恰如其分、恰好满足自己学习的需要却是有不少技巧的。1、 安装开始后会要输入产品的ID号,如果用的是破解版的VC则ID号全是1,这是所有学习VC的人都知道的了。2、 在安装过程中会要你选择安装模式,这时请选择“定制(custom)”模式。3、 下面是要你指定“共用(common)”文件夹的位置,一般选用默认位置比较好,除非你的C盘空间不够了(注意安装VC6和MSDN共约需2G左右空间)。4、 如果你的系统已安装了VSS的以前的版本(不光是Visual Studio会安装,可能其它软件也会安装VSS),就会有一个提示,通知你将用VSS6代替以前的版本,这里一般选择YES即可。5、 然后就会要你选择想要安装的内容了,建议你先选择旁边的Select All,这样就把所有的内容都选上了,再勾掉VB、VF、VID和VSS即可。6、 随后将提示你注册环境变量,这里其实有两个提示,一是提示当你要从命令行运行编译器和链接器时可以通过运行在bin目录下的名为VCVARS32的批处理程序来完成路径的设置,二是提示你是否注册windows下的环境变量(建议选上),这样你就不必每次写程序都要设定路径了。也许同学们并不理解什么叫环境变量,环境变量其实是记录在系统注册表中的关于系统路径的一些变量,我们可以通过查看【控制面板/系统/高级/环境变量】来看一看注册环境变量后的情况,如下图所示:可以看到由于在VC的安装过程中注册了环境变量,所以在用户变量中就有了include、lib、MSDevDir、path等变量及其值,其值则指向VC安装的相应路径。正因为有了这些环境变量,当编译器与链接器在生成应用程序时才能准确地找到库函数所在的位置并将它们的二进制代码链接到程序中去。7、 安装程序然后将开始将相应的程序、各种运行库挎贝到系统中和指定的安装位置,在这段时间时请注意正在安装的文件,你可以大致地了解安装程序安装了哪些内容到你的硬盘里。8、 安装完成后将提醒你重新启动系统,这时最好选择重新启动系统而不是仅仅退出安装,因为安装并未真正结束。9、 系统重新启动后,将提示继续安装MSDN,此时如果你手边有MSDN的安装盘或者可以安装的MSDN,你可以选择安装MSDN,否则就不要选择了。10、 如果你不选择安装MSDN,安装程序会有一个警告,可以不必理会它而选择“是”。11、 随后安装程序会提示你继续安装InstallShield,这是一个用来帮助你写作安装程序的软件,如果你有它的安装盘则在你选择它以后那个“Install”按键将变得可用,不过InstallShield并不在Visual Studio 6这张盘里,而是在随Visual Studio 6发行的另外的盘中,所以这里一般不选择安装。12、 随后安装程序会提示安装其它服务器组件,因为没有安装盘这里我们也不能选择安装(有不少同学不清楚这些,所以总是选择安装,于是安装程序就会提示你插入相应的安装盘,但因为没有这些安装盘,结果就提示安装失败,于是很多同学就以为安装有问题,其实此时VC的安装已经成功完成了)。13、 最后安装程序会提示注册程序,如果不是正版的,就不能注册成功,所以这里就不能选注册了,否则也会提示安装不成功的。14、 到此整个VC的安装就完成了,但相关的安装还没完。(三) MSDN的介绍与安装MSDN(Microsoft Developer Network)是微软公司维护的一个网站,其中有所有公开的、关于微软产品的软件开发帮助文档资料,任何人都可以通过internet访问这个网站(/),下面是MSDN Library Help中的介绍内容,请认真阅读(因为英语,特别是必要的专业英语水平对于程序开发人员来讲也是非常重要的)。MSDN, the Microsoft Developer Network, is the essential reference for developers who use Microsoft development tools or target any Windows or Internet platform. The MSDN Library contains more than 1.1 GB of technical programming information, including sample code, the Developer Knowledge Base, Visual Studio documentation, SDK documentation, technical articles, conference and seminar papers, and technical specifications.翻译:MSDN,也即Microsoft Developer Network,是那些使用微软公司的开发工具或者旨在Windows或因特网平台(开发)的开发人员的(最)基本参考资料。MSDN库中包括有超过1.1G的关于软件开发技术的内容,其中有示例代码、开发者知识库、Visual Studio文档、SDK(software develop kit软件开发包)文档、技术文章、会议和论坛论文以及技术标准。现在大家可能会觉得奇怪了,MSDN既然是一个网站,怎么这里又是这样一个可以运行安装的程序?关于这个问题,需要说明的是关于MSDN的发布问题。微软公司为了让那些不方便上网(或者网速很慢)的程序员也能方便的使用MSDN网站中的内容,会定期(每年一月、四月、七月、十月)将整个网站中的当前内容打成一个安装包,以光盘的形式进行出售。例如Visual Studio 6在发售时就一共有七张光盘,其中一张是Visual Studio 6,另有三张是MSDN(应该是1998年的1月版),其它三张则是当时的各种SDK和相关软件。2001年10月版的MSDN是VC6所支持的最后一版MSDN,在此之后的MSDN则由于采用了另外一种新的帮助文件格式而无法与VC6兼容。安装完VC的第一件事就是要安装MSDN(因为没有MSDN写程序基本是件不可能的事),MSDN的安装中要注意选择定制安装,因为其中有不少内容是与VC完全无关的。另外安装的位置也请考虑一下,因为MSDN的内容有不少,如果安装全部与VC相关的内容的话,大约也有接近1G的内容,所以如果你的C盘的可用空间如果不多了的话,可以考虑安装到其它位置。在随后的安装中,同样最好是先选择“Select All”,然后去掉VB、VF、VID和VJ+的相关内容。(四) 什么是Visual Studio 6.0 Service Pack 6?Visual Studio 6.0 Service Pack 6(Vs6sp6.exe)是Visual Studio 6的补丁包第六版。关于补丁包,可能很多同学没有听说过或者说不明白它的用途,但这个软件对于Visual Studio 6来说是非常重要的,因此花点篇幅来谈谈也是很有必要的。微软公司开发的软件产品,一般每隔一段时间都会发行补丁包的,补丁包主要是对前段在软件中发现的漏洞的修复。其修复的方法,一般是将原来有漏洞的软件模块替换掉。例如,如果发现一个软件模块中有问题,我们这里假设是一个库函数例如我们常用的printf函数有问题,那么第一件事当然是重写printf函数了,而这个函数则是在LIBC.LIB、LIBCMT.LIB、MSVCRT.LIB、MSVCRT.DLL等多个库文件中都出现的,因此第二件事则是将重写完的printf函数放到这几个库的源代码中去并重新编译生成这几个库,最后则必需写一个安装程序,这个安装程序则负责用这几个新的库文件替换目标系统中的旧库文件。需要说明的是,Visual Studio 6是1998年发布的,而其补丁包6则大约是在2001年发布的,它也是Visual Studio 6的最后一个补丁包了,因为其后微软公司将Visual Studio 6升级成了Visual S了。MSDN安装完后,第二件事就是将VS6的补丁包打好,所以我们要安装从微软公司下载的VS6SP6.exe程序,运行VS6SP6后将提示你指定一个解压的位置,这个位置是任意的,安装完后解压的内容也可以删除的。解压完后运行相应目录下解压出来的setupsp6.exe程序即可,至此整个VC6的安装才算完成了。(五) Visual Studio安装程序安装了哪些内容?整个VC6的安装虽然完成了,但只是完成安装是不够的,你必须得明白安装程序安装了哪些东西,它们都在哪里?所以你得记住几个目录:1、 C:Program FilesMicrosoft Visual StudioCommonMSDev98Bin;这个目录下有集成开发环境程序MSDEV.EXE,你可以运行一下这个程序你会发现它和运行【开始/程序/Microsoft Visual Studio 6.0/Microsoft Visual C+ 6.0】是一样的,其实后者只不过是前者的快捷方式而已。这个目录下还有一个RC.exe程序,它是资源编译器。2、 C:Program FilesMicrosoft Visual StudioVC98Bin;这个目录下有很多重要的程序,最重要的是VC6所带的C+编译器CL.EXE和链接器LINK.EXE。3、 C:Program FilesMicrosoft Visual StudioVC98CRTSRC;这个目录有绝大部分VC的运行库函数的头文件和源文件,VC的运行库(run-time Library)包括了全部C语言的库函数,另外还有不少微软公司为了方便Windows下程序设计而加入的库函数。总之,在C:Program FilesMicrosoft Visual StudioVC98CRTSRC目录下有很多我们熟悉的库函数的头文件,也有不少源文件,同学们在必要时可以参考这些文件。4、 C:Program FilesMicrosoft Visual StudioVC98Include;这个目录则是所有C+标准库头文件和win32编程的相关头文件了,例如C+标准库中常用的vector、list等头文件都在这里了。5、 C:Program FilesMicrosoft Visual StudioVC98Lib;这个目录下则是所有库函数以及win32 API(应用程序编程接口)静态链接库函数的二进制代码所在的位置。值得一提的是这个目录下的WIN32API.CSV文件,这个文件是一个CSV文件(逗号分割的文本表格文件),你可以用excel打开它,也可以用记事本打开它,不过记事本打开后不太好看。这个文件则列出了到VC6发布时为止所有的windows下的程序员可以调用的API了。6、 C:Program FilesMicrosoft Visual StudioVC98MFC;这个目录下则是关于MFC(微软基础类库)的头文件、库函数和源文件了。(参考并完成课堂实践内容1)(六) 如何在Visual Studio 6.0中编译和链接程序要在VC中编译、链接程序,首先要在VC中为这个程序新建一个基于控制台的应用程序:1、 选择File/New,在New向导的Projects选单中选择Win32 Console Application,同时在Project name中给工程取名,并在Location中为工程选定工程目录,然后选择OK。2、 在Win32 Console Application-step 1 of 1对话框中选择An empty project,然后选择Finish,并在New project Information对话框中选择OK。这样我们就新建了一个新的、控制台应用程序的工程,工程尚未包含任何程序文档。下面我们将用两种方法将源程序加入到工程中去。3、 第一种方法(1) 用一种文本编辑器编辑C/C+源程序。(2) 将编辑好的源程序保存为cpp文件或h文件。(3) 在VC中选择Project/Add to Project/Files,在Insert Files into Project对话框中指定要加入到工程中的一个或多个文件。4、 第二种方法(4) 在VC中选择Project/Add to Project/New,在New向导的Files选单中选择C/C+ Header File或C+ Source File,并勾选Add to Project,同时为文件取好名字,然后选择OK。(5) 然后在工程的工作区的文件视窗中选择并打开刚才加入的空文件,在其中输入源程序即可。5、 最后,请在VC中编译并运行源程序:选择build/compile *.cpp可以编译某一指定程序;选择build/build *.exe则会将工程中所有的源程序逐一编译后再链接生成可执行程序;选择build/execute *.exe则可运行已生成的可执行程序。(参考并完成课堂实践内容2、3、4)三、课堂实践内容1、 请在自己的电脑上安装visual studio 6.0、MSDN及其补丁包6,并回答以下问题:(1) 安装程序一般要完成哪些任务?(2) visual studio 6.0安装程序将在你的电脑里建立哪些目录?这些目录中是些什么内容?(3) 在安装前后你的系统环境变量发生了什么样的变化?(4) 在安装前你的系统对于.c和.cpp以及.h文件的默认打开应用程序有没有,若有是哪个程序?安装后的是哪个程序?为什么会有这些变化?2、 在VC6中编译最简单的“hello C+”应用程序。3、 阅读辅助资料中的VC6工程中的文件类型说明,并在编译的最简单的“hello C+”应用程序工程目录中找到它们的(不一定全部都能找到)。4、 如果要直接打开一个已有的VC工程,应该直接打开工程中的哪一个文件?四、实验条件安装有windows2000或XP的PC机。五、实验报告要求按要求完成课堂实践内容并将问题的回答写入实验报告书,对于编译好的程序请将工程目录下的debug或release目录删除,然后将整个工程目录用winrar软件打包后发到教师邮箱,邮件中用文字注明班级学号和姓名。六、思考题1、 阅读辅助资料中的学习C+的最重要书籍。2、 阅读辅助资料中的关于C+编译器和IDE的介绍。3、 阅读辅助资料中的在console mode中使用 C/C+ 编译器。实验二 编译及语法错误处理实验学时:4实验类型:综合实验要求:必修一、实验目的本实验作为课程配套实验的第二个实验,旨在使学生对编译环节有一个全面且较深入的认识,帮助学生掌握编译选项的设定,了解何时可以编译,编译时可能遇到哪些常见的语法错误及处理方法等。 二、预习内容编译和链接是程序设计中最为基本的环节,初学者常常因为没有这些方面的相关知识而屡屡困惑,因此这两个实验将分别介绍这两个对于初学者来说感觉很困难、而对非初学者来说却不值一提的环节。(一) 认识VC中的编译器及其选项在上一实验的辅助资料中的由台湾著名IT技术作家侯捷写的网文在 console mode 中使用 C-C+ 编译器中,介绍了VC6中的编译器以及如何设定环境变量、如何在DOS中调用它来编译源程序。对于在此文中已经介绍的内容,这里就不再赘述了,(参考并完成课堂实践内容1、2)这里要重点介绍的是VC6中的编译器CL.exe的编译选项及其设定的方法。首先,我们要在DOS中来查看编译器的编译选项。在DOS窗口切换到VC安装目录下的“VC98Bin”目录,然后键入“cl.exe /?”来查看编译器的编译选项,在今后的学习中,我们将会了解其中的部分选项。其次,我们也可以在MSDN中看到关于编译器的选项,如果使用的是MSDN的2001年七月版,则在“MSDN Library - July 2001/Visual Tool and Languages/Visual Studio 6.0 Documentation/Visual C+ Documentation/using Visual C+/Visual C+ Programmers Guide/Compiling and Linking/Details/Compiler Reference”目录中可以看到。(二) VC中新建向导与编译器选项的自动设定很多初学者不清楚编译器选项的作用,更不清楚在集成开发环境下这些选项是如何设定的。在VC中有不少向导可以帮助我们快速的开发应用程序,原因就是它们帮助我们作完了诸如编译器、链接器选项的设定之类的工作。编译器选项的设定是由新建向导完成的。运行VC集成开发环境以后,当我们选择File/New菜单时,新建向导就开始工作了。它通过向用户提一系列与工程相关的问题并根据用户的响应来确定编译器选项该如何设定。我们可以按上一实验末尾所述的那样新建一个基于控制台的应用程序,然后我们就可以在VC中的Project/Settings菜单的“C/C+”选单中的“Project Options”中看到当前工程中设定的编译选项了,如图2-1所示,这些内容就是新建向导帮我们设定好的。在VC中这些选项我们可以手动地修改,也可以通过“C/C+”选单中的其它可选部分来修改。例如,我们可以在“Optimization”中看到当前是“DisableDebug”,这表示当前是建立Debug版的应用程序,是没有对生成的代码进行优化的。改变其值为“Maximize Speed”,这时我们可以看到在“Project Options”中有一个“/Od”选项变成了“/O2”,表示当前工程的编译选项的优化选项为最快运行速度了。同样,我们也可以改变“Warning level”的值来观察工程选项的变化。图2-1(三) 何时可以编译int notuse1(int,float);int notuse2()int i;i=1+2;return i;int j=1+2;初学者总是不清楚一个源程序何时可以编译、何时应该编译。一般说来,一个源程序没有语法错误就是可以编译的,但在VC中会有点特殊情况。我们可以先按上一实验末尾所述的那样新建一个基于控制台的、只输出“Hello World!”的应用程序,然后选择Project/add to Project/New,再选择C+ Source File并为即将编辑的文件取好文件名,这样我们就在一个工程中加入了一个空的源程序,我们可以先试着在其中加入代码如下:然后选择Build/Compile *来编译这个源程序。需要说明的是Compile与Build的区别在于,Compile首先将当前源程序存盘然后只编译一个源程序并生成目标(.obj)文件,Build则会将当前工程中的所有源程序存盘然后逐一编译所有源程序,再从main( )函数开始链接生成可执行的应用程序。编译上述源程序将会产生一个错误,提示如下:fatal error C1010: unexpected end of file while looking for precompiled header directiveError executing cl.exe.产生这个错误的原因并非源程序有什么语法错误,将光标放在C1010(C表示是Compile,1010为错误号;相应的还有L表示Link)中,并按下F1键,MSDN会运行并自动跳转到C1010错误的解释处,解释如下:Fatal Error C1010unexpected end of file while looking for precompiled header directiveA precompiled header was specified, but it did not contain a precompiled header directive.This error can be caused by specifying an incorrect file as a header file, or by specifying an include file with the /Yu (Use Precompiled Header) command line option that is not listed in the source file as an include file.即这个错误产生的原因是因为每个工程默认是都有一个指定的预编译头文件,如果没有包含这个头文件的话则会产生此错误。解决的方法有两个:最简单的是在程序最前面加上#include “stdafx.h”;另一个方法则是取消预编译头文件,选择Project/Settings ,再在C/C+选单中的“Category”中选择“Precompiled Headers”,再将原来的“Use precompiled hesder file(.pch)”改为“Not using precompiled headers”即可,如图2-2所示。编译完成后我们可以在相应的目录下看到相应的目标文件生成了。(参考并完成课堂实践内容3)图2-2因此,在VC中一个源程序能够编译的要求是“符合语法且正确包含了预编译头文件”。另外一个重要问题是:我们应该在什么时候来编译它们?对这个问题是不能一概而论的,对于初学者来说,应该根据自己对语法和编码的熟练程度来决定编译的频繁程度。因为编译中可以发现语法的错误,如果写了一大段程序后再来编译,可能其中包含了很多错误,这时我们就不容易找到错误发生的位置和原因了。因此初学者应尽可能多的编译,以便将错误定位在很小范围内。一般说来,初学者应该每10行左右代码编译一次。而对于熟练的程序员来说则有可能上百行才编译一次,当然编译的频繁程度还跟源程序的规模以及计算机的运行速度有关,源程序规模大、计算机运行速度慢时编译一次花费的时间就多,相应地编译的频繁程度就要低些。(四) 分别编译初学者在学习过程中所遇到的程序规模都是很小的,一般将代码全部放在一个源程序中是没有问题的,但在实际的软件开发中,如果将所有的代码都放在一个源程序中则会有很多问题。一是不利于共同开发,二是编译太耗时。VC中的编译器遵循增量编译的规则,也即是说只有当一个源程序的内容被改变时才重新进行编译。这样作的好处是:如果改变一个文件的代码,不需要重新编译整个程序,这样将会节省大量的时间。因此,对于一个很大的源程序,熟练的程序员在开发时常常会将其分成多个小的源程序,这样每次编译时只编译较小规模的源程序,当一个工程要编译很多次时节约的时间是很可观的,当工程开发完毕后才将这些小的源程序合并成一个大的源程序。/没有分开的源程序#include class Boxint height,width,depth;public:Box(int ht=1,int wd=2,int dp=3)height=ht;width=wd;depth=dp;int volume()return height*width*depth;Box();int main()Box thisbox(4,5,6);Box defaultbox;int volume=thisbox.volume();std:coutvolumestd:endl;volume=defaultbox.volume();std:coutvolumestd:endl;return 0;此外,C+中常将函数的声明、类的声明、常量的定义等放在头文件中(.h),而将函数的定义、类的定义放在源程序中(.cpp或.c),当要使用定义好的类时只须include入相应的头文件即可。例如声明一个box类时将类的定义放在box.h中,而将box类的实现放在box.cpp中,并在文件前面加上#include “box.h”的预处理指令。当在一个源文件中要使用box类时,只需在相应文件的前面加上#include “box.h”即可,如下面的代码所示。下面则按头文件与源文件将上述源程序分成三个源程序main.cpp、box.h和box.cpp:/分开的源程序main.cpp#include box.h#include int main()Box thisbox(4,5,6);Box defaultbox;int volume=thisbox.volume();std:coutvolumestd:endl;volume=defaultbox.volume();std:coutvolumestd:endl;return 0;/分开的源程序box.cpp#include box.hBox:Box(int ht,int wd,int dp)height=ht;width=wd;depth=dp;Box:Box()int Box:volume()return height*width*depth;/分开的源程序box.hclass Boxint height,width,depth;public:Box(int ht=1,int wd=2,int dp=3);int volume();Box();需要说明的是源程序文件名的取名并不是必定的,即关于box类的声明的头文件不是必需命名为box.h,同样box类的声明的源文件也不是必需命名为box.cpp,只不过是因为这样作能够清楚地标明源程序所包含的内容才这样作的。(参考并完成课堂实践内容4、5)另一个值得注意的问题是:如果我希望编译一个程序,它的文件分布在不同的目录下或者甚至是在不同的机器上是否可以?回答是肯定,方法是在用双引号的方式中指定文件的全路径名,如#include “d:workhfilefile.h”。这里请回忆一下:#include “file.h”与#include 的区别。这两种方法都是合法的,区别在于:对于前者系统将先在引用被包含文件的源文件(如file.c)所在的文件目录中寻找要包含的文件,若找不到,再按系统指定的标准方式检索其它目录。另外要说明的是,在VC中这种方式将是在所有有源文件的目录中查找。对于后者系统则不检查引用被包含文件的源文件(如file.c)所在的文件目录而直接按系统标准方式检索文件目录。(五) 语法错误的处理VC中的C/C+编译器在编译过程中是可以发现程序的语法(syntax)错误并通过调试窗口向用户报告错误号的,因此语法错误是比较容易发现和处理的。当然对初学者来说,能够对语法错误的处理有一个基本的认识,可以有效地加快学习进度和坚定学习信心,因此本篇也对这些内容作些说明。首先,因为C/C+都是形式化的语言,因此用它们写成的程序都是必须是严格按语法写成的,编译器则能依据这些严格按语法写成的程序生成目标文件。目标文件虽然还不是可执行的程序(必须经过链接后才能运行),但它里面却包含着可执行的二进制代码。但是,如果程序没有严格按语法则编译器将无法编译并生成目标文件,同时编译器的开发者们会根据错误的形式给错误分类并根据他们自己的经验大致地判定错误的产生的原因,并在MSDN中给出修正的提示等。也正因为如此,编译器对于某些真正存在错误的位置常常没有报错,而是对之后的某处报错。另一种常见的情况是当遇到一个语法错误时,编译器可能会一下子报出很多错误来(例如某一语句的最后没有打上分号)。遇到了语法错误,我们只需从第一个错误开始,修正这个错误后重新编译,然后又从第一个错误开始,往往在修正一个错误后,很多错误将会随之消失,因为它们是关联在一起的。此外,如果对于某行代码,你无法找到编译器报出的某个错误,而且你确信其中没有错误,那么你最好到前面几行代码中去寻找错误产生的原因。有经验的程序员使用的一种方法是将估计有错误的代码临时注释掉再编译,如果错误没有了,那么说明错误就在被注释掉的代码之中,然后再缩小注释代码的范围直至真正找到错误的原因。(六) 常见语法错误l 漏写了句末分号;l 输入了中文字符,特别是中文的标点符号,例如句末写的是中文分号;l 变量没有声明;l 没有正确地声明名空间;l 括号不匹配(特别是if语句中包含多重括号时);l 字符串没有最后的双引号结束符;l 带返回值的函数没有返回值或返回值类型不匹配;l 指定的头文件不存在;这些常见的语法错误是大多数初学者最易犯的,(参考并完成课堂实践内容6、7)除此之外还有一些虽然不是语法错误(例如警告等),但常常是错误的输入或不正确的文件属性引起的,如:1、 在if 语句中将“= =”误输入为“=”;2、 变量特别是数组或指针没有初始化。另外一种特殊情况是,当我们从光盘上将一个工程复制到硬盘上来时常常会遇到许多问题,这些问题都是由于文件的只读属性所引起的,因此每当从光盘上复制工程文件到硬盘后一定要将它们的只读和存档属性都去掉。文件的只读属性引起的问题包括如类向导文件无法打开以便修改而产生的一个提示、编辑后的源程序无法保存、数据库文件无法打开而产生C1033错误等。(参考并完成课堂实践内容8、9、10)三、课堂实践内容1、 请用记事本打开VC安装目录下的“VC98Bin”目录中的VCVARS32.BAT文件并解释其中每一语句的作用。2、 请按在 console mode 中使用 C-C+ 编译器中的要求设定环境变量并在控制台中编译一个C+源程序。3、 完成预习内容第三部分中的工程,再现C1010错误并修正。4、 请将预习内容第四部分中的box.h、box.cpp和main.cpp加入到一个工程中并编译生成可执行程序。5、 请将辅助材料中的“待分开的程序”分成多个头文件和源文件并加入到一个工程中并编译生成可执行程序。6、 请逐一再现预习内容第六部分中的常见错误,记录下它们的错误号和MSDN中的解释并翻译和说明其中的内容。7、 找出辅助材料中待改正的程序目录下的程序中的语法错误并改正。8、 请将一个已编译链接完成的工程中的*.ncb文件的属性改成只读并观察有何现象。9、 请将一个已编译链接完成的工程中的所有源程序的文件属性改为只读并观察在修改源程序后(如只加入注释)有何现象。10、 请将一个已编译链接完成的工程中的debug目录里的文件属性改为只读并观察在编译时有何错误产生,试说明原因。四、实验条件安装有VC和MSDN的PC机。五、实验报告要求按要求完成课堂实践内容并将问题的回答写入实验报告书,对于编译好的程序请将工程目录下的debug或release目录删除,然后将整个工程目录用winrar软件打包后发到教师邮箱,邮件中用文字注明班级学号和姓名。六、思考题1、 请认真阅读附录VC6中编译器的选项,并尽可能多的指出每一选项的功能。2、 上网查找了解VC中的预编译头文件的作用及其对工程编译速度的影响。3、 阅读MSDN中“MSDN Library - July 2001/Visual Tool and Languages/Visual Studio 6.0 Documentation/Visual C+ Documentation/using Visual C+/Visual C+ Programmers Guide/Compiling and Linking/Details/Compiler Reference”中的内容,并完成以下工作:(1) 翻译此文前四段内容;(2) 点击此文中的“Set Compiler Options”链接并翻译其中内容和实践设置编译器选项4、 阅读MSDN中“MSDN Library - July 2001/Visual Tool and Languages/Visual Studio 6.0 Documentation/Visual C+ Documentation/using Visual C+/Visual C+ Programmers Guide/Preprocessor Reference”中的内容,并回答以下问题:(1) 什么是预编译器?其作用是什么?(2) 预编译器可处理哪些常用指令?其作用是什么?(3) 指出预编译语句中的#号运算符、#号运算符的作用。(4) 指出预编译指令“#pragma once”的作用。(5) 指出预编译指令“#line”的作用。(6) 指出预编译指令“#error”的作用。(7) 在VC中有哪些预定义的宏?指出“_date_”、“_time_”、“_file_”、“_line_”的作用及运用它们的方法。实验三 链接及链接错误处理实验学时:4实验类型:综合实验要求:必修一、实验目的本实验作为课程配套实验的第三个实验,旨在使学生对链接环节有一个全面且较深入的认识,帮助学生理解链接器的工作过程,了解链接器选项的设定,掌握库文件和目标文件的指定链接方法,了解常见的链接错误及处理方法。二、预习内容在图形用户界面的开发环境中,由于链接一般是自动进行的,所以链接器常常不被初学者所认识。很多初学者学习和使用IDE很久了,还不知道链接器是哪个程序、有何选项可供选择以及链接中可能会出现哪些方面的问题等。本实验的目的就是为初学者提供一些必要的、与链接相关的知识。(一) 链接器的作用VC6所带的链接器是 C:Program FilesMicrosoft Visual StudioVC98Bin目录中的link.exe程序。链接器的作用在DOS操作系统下是比较单一的,它的输入是目标文件(.obj)和库文件(.lib),输出则为.exe文件。而在Windows操作系统下,则相对要复杂一些(如图3-1)。因为Windows下的应用程序是需要对话框、位图、图标等资源的,因而输入中就要增加对这些资源进行描述的资源文件且链接器必须知道如何处理这些资源。此外,由于在Windows中支持动态链接技术,因此输入中常常含

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论