收藏 分销(赏)

C面向对象程序设计试验参考指导书谭浩强.doc

上传人:天**** 文档编号:2657361 上传时间:2024-06-03 格式:DOC 页数:84 大小:1.23MB
下载 相关 举报
C面向对象程序设计试验参考指导书谭浩强.doc_第1页
第1页 / 共84页
C面向对象程序设计试验参考指导书谭浩强.doc_第2页
第2页 / 共84页
C面向对象程序设计试验参考指导书谭浩强.doc_第3页
第3页 / 共84页
C面向对象程序设计试验参考指导书谭浩强.doc_第4页
第4页 / 共84页
C面向对象程序设计试验参考指导书谭浩强.doc_第5页
第5页 / 共84页
点击查看更多>>
资源描述

1、C+面向对象程序设计试验指导书江西理工大学电气工程和自动化学院9月目录绪论10.1 写本书目标10.2 本书结构安排10.3 怎样使用本书2试验一 C+程序运行环境和运行C+程序方法31.1 试验目标31.2试验内容和步骤3试验二 C+对C 扩充52.1 试验目标52.2 试验内容52.2.1 程序阅读52.2.2 程序设计72.3 思索题7试验三 类和对象(一)83.1 试验目标83.2 试验内容83.2.1程序阅读83.2.2 程序设计104.3思索题10试验四 类和对象(二)114.1 试验目标114.2 试验内容114.2.1程序阅读114.2.2 程序设计124.3思索题13试验五

2、运算符重载145.1 试验目标145.2 试验内容145.2.1程序阅读145.2.2 程序设计165.3思索题17试验六 派生和继承186.1 试验目标186.2 试验内容186.2.1程序阅读186.2.2 程序设计20试验七 派生和继承多重派生217.1 试验目标217.2 试验内容217.2.1程序阅读217.2.2 程序设计247.3思索题24试验八 C+程序、Windows程序和MFC程序258.1 试验目标258.2 试验内容258.2.1 试验描述258.2.2 试验步骤268.2.3 试验结果分析328.3思索题34试验九简单单文档MFC程序设计359.1 试验目标359.2

3、 试验内容359.2.1 试验描述359.2.2 试验步骤369.2.3 试验结果419.3思索题42试验十简单对话框程序设计4310.1 试验目标4310.2 试验内容4310.2.1 试验描述4310.2.2 试验步骤4310.2.3 试验结果5010.3思索题50试验十一简单数据库程序设计5211.1 试验目标5211.2 试验内容5211.2.1 试验描述5211.2.2 试验步骤5311.2.3 试验结果6011.3思索题61总结62参考书目63绪论0.1 目标面向对象程序设计语言是现今最流行编程语言之一,C+语言是作为最早最流行面向对象编程语言之一而发展起来。学好C+语言不仅能够从

4、面向过程程序设计思想过渡到面向对象程序设计思想,而且能够为以后学习其它面向对象语言打下坚实基础,使得学习其它面向对象编程语言变得轻松、轻易。试验作为学习C+语言不可缺乏一个步骤不仅能够加深学生对C+面向对象思想了解,同时能够提升学生动手编程能力,培养学生良好编码习惯。现在相关C+语言理论教材比较多,不过适合学生练习试验指导书却比较少,这严重影响了学生对C+这门课程学习。大多数情况下,学生学习C+语言之前全部刚刚学习过C语言程序设计这门课程,从编程环境到编程语言同时转换过来需要一定时间和合理指导,同时在学习C+理论知识过程中,学生极少也极难把C+程序设计和现在社会上比较流行基于VC6.0MFC程

5、序设计联络起来,所以极难让学生在学习C+语言同时,提升学生基于VC6.0MFC程序设计能力。编写本书目标就是从以上几点来考虑,首先要把学生从以前编程环境中脱离出来,然后循序渐进地介绍新编程环境新知识点,同时把C+语法结构融入到基于VC6.0MFC程序设计中去,从而实现学生轻松掌握C+这门程序设计语言和习惯编程环境和了解C+语法和MFC之间关系目标,从而提升学生程序设计能力和学生程序设计成就感。0.2 结构安排试验课程安排离不开理论课程学习,本书编排以知识点为关键,理论教材蓝本为C+面向对象程序设计教程(第2版)陈维兴 林小茶编著,清华大学出版社出版。经过为不一样知识点设计对应试验程序,来达成学

6、生练习和了解C+语言面向对象思想目标,同时本书还设计了部分程序设计课后练习题,设计本部分有三个目标:一个是有些课堂练习中没有措施练习到知识点将在这部分表现,指导老师能够依据需要来增删课堂讲解内容;另一个是为一部分有能力有爱好深入学习C+程序设计同学提供部分练习题,从而提升这部分学生程序设计能力;第三就是避免有些学生在做试验过程中盲目根据指导书中步骤一步一步地不加思索地写程序,学生要回复这些问题,就必需看懂这些程序中隐含知识点,从而达成理论知识和实践知识愈加好地结合。对于课堂练习,本书共安排了11个试验,共24个课时,试验安排以下:试验一C+程序运行环境和运行C+程序方法(2课时)试验二C+对C

7、 扩充(2课时)试验三类和对象(一)(2课时)试验四类和对象(二)(2课时)试验五试验五 运算符重载(2课时)试验六派生和继承(2课时)试验七派生和继承多重派生(2课时)试验八试验八 C+程序、Windows程序和MFC程序(2课时)试验九简单单文档MFC程序设计(2课时)试验十简单对话框程序设计(2课时)试验十一简单数据库程序设计(4课时)0.3 怎样使用本书面向对象程序设计语言出现目标就是为了设计大型软件系统,不过教学过程中极难让学生在课堂上实现一个大型(甚至是成型)系统,所以作为老师应该引导学生在实现一个简单功效性程序同时让学生思索,思索怎样把这个地方技术实现到一个复杂应用系统中去;另外

8、老师要充足利用本书中第二部分练习,引导学生去思索怎样利用C+相关技术从头到尾设计一个含有实用价值应用程序。作为学生假如只是简单地根据本书中提供步骤一步一步完成某一个程序,而不去思索为何要这么做话,那么学生能学到知识也仅仅是C+语法而已,并不能真正了解C+面向对象思想,最终不能设计出好程序来。所以学生不仅要全部实现本书中课堂练习,得出正确结果,而且在完成了程序后还要思索本程序为何要这么设计,假如换成其它程序设计语言会怎么实现,只有这么才能够真正了解C+精髓,从而掌握C+。另外学生在学习最终四个试验时候一定不要忘记前面C+语法知识,能否合理地将C+三大特征利用到MFC程序设计中是提升程序运行效率,

9、存放效率和程序封装性一个最有效手段。试验一 C+程序运行环境和运行C+程序方法1.1 试验目标(1)了解所用计算机系统基础操作方法, 学会独立使用该系统。(2)了解在该系统上怎样编辑、编译、连接和运行一个C+程序e(3)经过运行简单C+程序, 初步了解C+源程序结构和特点。应学会在一个以上编译环境下运行C+程序,提议学习并掌握Visual C+ 6.0使用方法。1.2试验内容和步骤(1) 检验所用计算机系统是否已安装了C+编译系统, 并确定它所在子目录。(2) 在Visual C+环境下编译和运行C +程序。在第一次上机时, 按以下步骤建立和运行C+程序: 优异入V i sual C+ 6 .

10、 0 环境。 根据上机指导第9章介绍方法, 在自己指定子目录建立一个名为test. cpp 新文件(此时还未向文件输入内容) 。 从键盘输入以下程序(第l 章第4题) int main();int a,b;c=a+b;cout” a+b=”a+b; 选择Build Compile test.cpp 命令, 对此源程序进行编译。观察和分析编译信息。 依据编译信息指犯错误,修改程序。再进行编译,假如还有错, 再反复此过程,直到编译不犯错为止。 选择BuildBuild test.exe 命令,对程序进行连接, 假如不出销, 就会生成可实施程序test.exe。 选择Build- Execute t

11、est. exe 命令, 实施可实施程序test. exe。观察屏幕改变。在输出窗口应显示程序运行结果。 分析结果是否正确, 假如不正确或认为输出格式不理想,能够修改程序,然后重新实施以上至步骤。另外,还可利用已经有源程序建立一个新程序。因为刚才已建立了一个名为test. cpp源程序, 能够以它为基础建立一个新程序。这么更方便些。按以下步骤: 经过“资源管理器”或“我电脑”找到已经有源程序test. cpp。 双击test. cpp 图标, 进入Visual C +集成环境, 打开test. cpp 。 在test. cpp 基础上将源程序修改为以下内容(第l 章第5 题) ,#includ

12、e using namespace std;int main( )int a,b;c=add(a,b)cout”a+b=”cendl;return 0;int add(int x,int y);z =x+y;return(z);选择File-Save as 命令,用新文件名other.cpp 保留。此时, other.cpp 和tesl. cpp在同一子目录下。对新文件other. cpp 进行编译、连接和运行。步骤同前。(3) 请思索以下问题,并上机进行试验。将本试验中第2 个程序作以下改动:(a) 将程序第1,2 行改为下面一行#include (b) 将第3 行int main ()改为

13、void main()( c ) 删去main 函数中retum 0;再运行此程序。并对此作分析,得到必需结论。(4) 输入两个整数,将它们由大到小次序输出(本题是 C +面向对象程序设计第l章习题第8题) 。使用指针方法。使用变量引用。比较这两种方法特点和使用方法。试验二 C+对C 扩充2.1 试验目标1深入了解和熟悉VC+6.0开发环境,学会在VC+6.0环境下调试程序;2熟悉C+中简单标准输入输出函数实用;3了解const修饰符作用,并学会应用const修饰符;4了解内置(内联)函数优缺点并学会使用内置函数;5了解和使用函数重载和带默认参数函数;6使用new和delete进行动态内存管理

14、;7了解和使用引用。2.2 试验内容2.2.1 程序阅读1了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;int max_def(int x, int y)return (xy?x:y);int max_def(int x, int y, int z)int temp = 0;return (temp=(xy?x:y)z?temp:z;double max_def(double x, double y)return (xy?x:y);int main()int x1 = 0;int x2 = 0;double d1 =

15、0.0;double d2 = 0.0;x1 = max_def(5,6);x2 = max_def(2,3,4);d1 = max_def(2.1,5.6);d2 = max_def(12.3,3.4,7.8);-coutx1=x1endl;coutx2=x2endl;coutd1=d1endl;coutd2=d2endl;-return 1;问题一:上述程序输出结果是什么?答:问题二:哪些情况能够参与函数重载?答:问题三:处调用是哪个函数?答:问题四:处输出结果为何是d2=12,而不是d2=12.3?答:2了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include u

16、sing namespace std;int main()int *p1 = new int; -int *p2 = new int(0); -char *p3 = new char64; -return 1;问题一:、处动态申请内存分别代表什么不一样意思?答:问题二:该程序存在什么隐患?更正该程序使隐患消除。答:3了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;void swap(int a, int b)int temp = a;a = b;b = temp;void swap(int *a, int *b)int

17、temp = *a;*a = *b;*b = temp;int main()int i = 5;int j = 10;coutBefore swap: i=i,j=jendl;swap(i,j); -coutAfter the first swap: i=i,j=jendl;swap(&i,&j); -coutAfter the second swap: i=i,j=jendl;return 1;问题一:上述程序输出结果是什么?答:问题二:处函数调用后并不能实现两个数交换,而处却能够,为何?答:问题三:处调用是哪个重载函数?答:2.2.2 程序设计1使用函数重载方法定义两个重名函数,分别求出整

18、形数平面间两点间距离和双精度平面间两点间距离,假如没有输入第二点坐标则默认为圆点(0,0)。2设计一个函数:exchange(float x, float y, float z),当调用exchange(a,b,c)时,将a内容赋值给b,b内容赋值给c,c内容赋值给a,要求采取引用方法来实现。2.3 思索题1自己设计一个程序,测试const三种使用方法:指向常量指针,常指针,指向常量常指针。2编写一个函数,实现两个字符串变量交换,要求参数用引用。试验三 类和对象(一)3.1 试验目标1类定义;2类对象使用;3类组员变量定义和使用;4类组员函数定义和使用;5了解类作用域;6了解类申明;7了解类中

19、private和public权限申明依据。3.2 试验内容3.2.1程序阅读1了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;class CDatevoid Set(int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return (year%4 = 0 & year%100 != 0)|(year%400 = 0); public:void Print() coutmonth/day/yearendl;private:int m

20、onth; int day; int year;void main()CDate a; - a.Set(10,15,) ; a.Print();问题一:以上程序编译能经过吗,为何,应该怎样更正?答:问题二:类CDate中分别有哪些组员函数和组员变量,它们分别属于哪种访问权限?答:问题三:处语句意思是什么?答:2了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;int month;/全局变量 int day; int year;void Set(int m,int d,int y) -a:month=m; -:day=d;

21、:year=y;class CDatepublic: void Set(int m,int d,int y) -b :Set(m,d,y); -void Print() coutmonth/day/yearendl;private: int month; /组员变量int day; int year;void main()CDate a; a.Set(10,15,) ;a.Print();问题一:处是在给组员变量赋值,还是在给全局变量赋值,假如去掉域作用符:,程序是否还能正确运行?答:问题二:处调用哪个函数,假如去掉域作用符:,程序是否还能正确运行?答:问题三:该程序输出结果是什么,试解释该输

22、出结果。答:3.2.2 程序设计1需要求3 个长方柱体积,请编一个基于对象程序。数据组员包含length(长)、width (宽) 、height (高)。要求用组员函数实现以下功效 由键盘分别输入3 个长方柱长、宽、高: 计算长方柱体积: 输出3 个长方柱体积。编程序,上机调试并运行。本题是C+面向对象程序设计第2 章第6 题。4.3思索题1试设计一个复数类,该类有实部和虚部两个组员数据,组员数据采取私有访问权限,同时该类有两个共有组员函数,分别用来设置组员数据和输出组员数据,在主函数中分别采取对象方法,指针方法和引用方法来调用该类公有函数设置和输出组员数据。试验四 类和对象(二)4.1 试

23、验目标1了解掌握this指针作用和使用方法;2了解掌握结构函数定义和作用;3掌握结构函数使用;4了解掌握拷贝结构函数定义和使用;5了解掌握结构函数重载;6了解掌握析构函数定义和使用。4.2 试验内容4.2.1程序阅读1了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;class CPointpublic:void Set(int x,int y);void Print();private:int x;int y;void CPoint:Set(int x,int y)x = x;y = y;void CPoint:Prin

24、t()coutx=x,y=yendl;void main()CPoint pt;pt.Set(10,20);pt.Print();问题一:以上程序编译能经过吗,试解释该程序?答:问题二:以上程序运行结构是否正确,假如不正确,试分析为何,应该怎样更正?答:2了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;class CPersonpublic:void Print();private:CPerson();private:int age;char *name;CPerson:CPerson()void CPerson:Pri

25、nt()coutname=name,age=ageendl;void main()CPerson ps(23,张三);ps.Print();问题一:以上程序存在三处大错误,在不改变主函数内容前提下,试更正该程序。答:4.2.2 程序设计1设计实现一个CPoint类,满足以下要求:a 该类包含两个整型组员变量x(横坐标)和y(纵坐标),和一个输出函数Print()用来输出横坐标和纵坐标,要求不能够在类外部直接访问组员变量;b能够采取没有参数结构函数初始化对象,此时组员变量采取默认值0;c能够采取直接输入参数方法来初始化该类组员变量;d能够采取其它CPoint对象来初始化该类组员变量;e设计一个主

26、函数来测试以上功效。4.3思索题1设计一个CStudent(学生)类,并使CStudent类含有以下特点:a该类含有学生姓名、学号、程序设计、信号处理、数据结构三门课程成绩;b学生全部信息由键盘输入,以提升程序适应性;c经过组员函数统计学生平均成绩,当课程数量增加时,组员函数无须修改仍能够求取平均成绩;d输出学生基础信息、各科成绩和平均成绩;e学生对象定义采取对象数组实现; f统计不及格学生人数。试验五 运算符重载5.1 试验目标(1) 深入了解运算符重载概念和使用方法。(2) 掌握多个常见运算符重载方法。(3) 了解转换结构函数使用方法。(4) 了解在Vi s ual C+ 6.0 环境下进

27、行运算符重载要注意问题。5.2 试验内容5.2.1程序阅读1了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;class CComplexpublic:CComplex()real = 0; imag = 0;CComplex(int x,int y)real = x;imag = y;int real;int imag;CComplex operator + (CComplex obj1)-CComplex obj2(real + obj1.real, imag + obj1.imag);return obj2;void

28、 main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; -cout obj.real endl;cout obj.imag endl;问题一:处运算符重载,为何该函数返回值要设计成CComplex类型?答:问题二:处运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,不过为何CComplex类中运算符重载函数只设计了一个参数?答:2了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;clas

29、s CComplexpublic:CComplex()real = 0.0; imag = 0.0;CComplex(float x, float y)real = x;imag = y;CComplex operator + (CComplex &obj1, CComplex &obj2)CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);return obj3;CComplex &operator+(CComplex &obj)obj.real += 1;obj.imag +=1;return obj;void print

30、()coutreal+imagiendl;private:float real;float imag;CComplex &operator-(CComplex &x)x.real -= 1;x.imag -= 1;return x;void main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);coutobj1=;obj1.print();coutobj2=;obj2.print();CComplex obj3 = obj1 + obj2;coutbefor+, obj3=;obj3.print();+obj3;coutafter+, obj3

31、=;obj3.print();-obj3;coutafter-, obj3=;obj3.print();CComplex obj4 = +obj3;coutobj4=;obj4.print();问题一:以上程序中三个运算符重载全部有错误,试更正过来,并分析该程序输出结果。答:5.2.2 程序设计1. 在以上复数类基础上,增加重载运算符乘“*”、除“/”,实现复数乘除运算。2. 有两个矩阵a 和b ,均为2 行3 列。求两个矩阵之和。重载运算符 + ,使之能用于矩阵相加. 如c=a+b, 本题是 C+面向对象程序设计第4 章第4 题。5.3思索题定义CPoint类,有两个组员变量:横坐标(x)和

32、纵坐标(y),对CPoint类重载“+”(自增运算符)、“-”(自减运算符),实现对坐标值改变。试验六 派生和继承6.1 试验目标1了解继承含义和申明;2了解共有派生、私有派生和保护派生含义和使用;3了解单派生类中结构函数和析构函数调用次序。6.2 试验内容6.2.1程序阅读1了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;class CBasepublic:CBase(int a):a(a)protected:void print()couta=aendl;private:int a;class CDerive : p

33、ublic CBasepublic:void print()CBase:print();coutb=bendl;private:int b;void main()CDerive d;d.print();CBase b;b.print();问题一:以上程序有两大错误,试指出来,并更正之?答:2了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include using namespace std;class CBasepublic:CBase(int a):a(a)coutbase structureendl;CBase()coutbase destructureendl;voi

34、d print()couta=aendl;protected:int a;class CDerive : public CBasepublic:CDerive(int a, int b,int c):CBase(a),b(b),c(c)coutderive structureendl;CDerive()coutderive destructureendl;void print()CBase:print();coutb.a=b.aendl;coutc=cendl;private:CBase b;int c;void main()CDerive d(1,2,3); -d.print();问题一:以

35、上程序输出结果是什么,说明为何?答:问题二:处语句实施完后,d.b.a值为多少?答:6.2.2 程序设计1定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类含有以下特点:aCLine类含有计算直线长度和斜率组员函数;bCCircle类含有计算圆面积组员函数。试验七 派生和继承多重派生7.1 试验目标1了解多重派生定义;2了解多重派生中结构函数和析构函数调用次序;3了解多重派生中虚拟基类作用;7.2 试验内容7.2.1程序阅读1了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。class CBase1public:CBase1(

36、int a):a(a)coutbase1 structure.endl;CBase1()coutbase1 destructure.endl;void print()couta=aendl;protected:int a;class CBase2public:CBase2(int b):b(b)coutbase2 structure.endl;CBase2()coutbase2 destructure.endl;void print()coutb=bendl;protected:int b;class CDerive : public CBase1, public CBase2public:C

37、Derive()coutderive structure.endl;CDerive()coutderive destructure.endl;void print()CBase1:print();CBase2:print();b1.print();b2.print();coutc=cendl;private:CBase1 b1;CBase2 b2;int c;void main()CDerive d;d.print();问题一:更正以上程序中存在错误,并分析该程序输出结果。2了解下面程序,并在VC+6.0下运行查看结果,回复程序后面问题。#include iostream.hclass CBasepublic:CBase(int a):a(a)int a;class CDerive1 : pu

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 应用文书 > 技术指导

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服