实验报告完整版.doc_第1页
实验报告完整版.doc_第2页
实验报告完整版.doc_第3页
实验报告完整版.doc_第4页
实验报告完整版.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:3月31日姓名: 杨忠豫学号:201008060105指导教师:程欣宇实验序号:一实验成绩:一、实验名称实验一、类与对象二、实验目的及要求1、熟悉visual c+集成开发环境;2、熟悉类的声明和实现;3、掌握成员变量、构造函数、成员函数的区别;4、强化认识类与对象的区别,学会使用类定义对象,学会使用对象完成其功能。三、实验环境visual c+ (版本不限)四、实验内容1、使用visual c+集成开发环境的各项基本功能;2、设计一个复数类,验证成员变量、构造函数、成员函数的定义和访问。3、创建类的对象五、算法描述及实验步骤1、使用visual c+集成开发环境,完成基本的控制台应用程序的创建、编译、运行、调试。了解其类视图、文件视图的基本功能。2、设计并实现一个复数类。2.1、设计一个复数类,声明两个公有成员变量,虚部和实部;2.2、给复数类添加一个构造函数,该函数有两个参数,虚部和实部;2.3、给复数类添加一个输出函数,能够使用cout输出形如:3+5i、-5-4i、32i、56、0等形式的复数。2.4、给复数类添加一个实现复数相加的函数。2.5、在main函数中,编写复数类的测试用例,分别能够创建指定的复数、输出、相加、再输出。六、调试过程及实验结果调试过程:第一次调试时,显示在real和image前面缺少“; ”,解决该问题后再次调试,当解决方案配置为debug时,调试结果为“debug输入复数并求其和.pch”预编译头文件来自编译器的早期版本,或者预编译头为c+ 而在c 中使用它(或相反)”,当解决方案配置为release时,程序就能够得到结果。实验结果:七、总结 在程老师的帮助下顺利完成程序的编写,通过本次实验使我对c+开发环境有所了解,在实践中渐渐的熟悉了c+,但是由于刚刚接触面向对象思想,而且这次实验的有些内容蒲天应老师还没讲,所以感觉用c+编程序还有些生疏,有些吃力。此次实验课最大的收获就是对面向对象的思想又有了更进一步的了解,也有了自己的一些想法和观点。首先要建立类,然后去想你的类有哪些成员,你需要它们来实现什麽功能,也就是说首先要有一个程序的大体构思,然后才能去编写程序八、附录#include stdafx.h#includeiostreamusing namespace std;class complexfloat real,image;public:complex(float r,float f)real=r;image=f;void output()if(real!=0|image=0)cout0&real!=0)cout+; coutimage;couti;complex add(complex other)complex result(0,0);result ;real=real+other.real;result ;image=image+other.image;return result;int _tmain(int argc, _tchar* argv) complex c1(3,1),c2(2,12),c3(0,0); c1.output(); cout+; c2.output(); cout=; c3=c1.add(c2); c1.output(); coutendl;return 0;贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:4月14日姓名: 杨忠豫学号:201008060105指导教师:程欣宇实验序号:二实验成绩:一、实验名称实验二、类的组合二、实验目的及要求1、掌握类复用的方式之一:组合;2、熟悉对象发生组合时,对象占用内存的情况,创建和销毁的顺序;3、掌握对组合的成员对象访问的方法。三、实验环境visual c+ (版本不限)四、实验内容1、分析计算机硬件的几大组成部分,将他们分别抽象成类并实现;2、通过组合的方法,实现一个计算机类;3、编写测试用例,观察计算机类对象在创建、调用、销毁时的状况。五、算法描述及实验步骤面向对象程序设计所设计出来的类,一种使用方式就是将其灵活地组合到更复杂的类中使用,这种使用方式也非常直观地对应问题领域的实际情况。以计算机硬件为例:计算机可以大致分成:显示器、主机、打印机、键盘、鼠标等组件。因此,我们可以将设计的各种组件类组合在一起,形成计算机类。下图说明了计算机类对象的组成情况及其内存分配情况:计算机对象。其它简单数据成员,如计算机品牌显示器主机键盘实验步骤1、实现各个部件类,注意要在构造函数和析构函数中输出调用提示,如cout”主机被构造”endls。2、定义出计算机类。3、构造计算机对象,观察和记录其部件的创建和销毁顺序。六、调试过程及实验结果调试过程:因标点符号不是用英文输入法输入,所以程序出错。经改正程序正常运行,仍然是在release情况下才能执行程序。七、总结析构函数与构造函数的调用顺序刚好相反,所以才会有这样的结果。通过本次实验对析构函数的调用进行实践,对于对象发生组合时,对象占用内存的情况,创建和销毁的顺序有所熟悉,并掌握了对组合成员对象访问的方法。而且打标点符号时记得一定要在英文输入法下输入,否则会出错。八、附录#include stdafx.h#includeiostreamusing namespace std;class boxpublic:box()cout主机被构造endl;box()cout主机被销毁endl;class monitorpublic:monitor()cout显示器被构造endl;monitor()cout显示器被销毁endl;class computerpublic:computer()cout计算机被构造endl;computer()cout计算机被销毁endl;private:monitor x;box y;int _tmain(int argc, _tchar* argv) computer a; return 0;贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:4月28日姓名:杨忠豫 学号:201008060105指导教师:程欣宇实验序号:三实验成绩:一、实验名称实验三、对象数组二、实验目的及要求1、掌握对象数组的两种创建方式;2、学会使用指向对象的指针数组;三、实验环境visual c+ (版本不限)四、实验内容1、设计一个学生类;2、创建学生类的数组;3、创建和销毁学生类的动态数组;4、创建一个指针数组,其中每个指针可以指向null或者一个学生对象。五、算法描述及实验步骤我们可以把类看成是c语言的一种数据类型,因此使用对象数组,就如同在c语言中使用int数组一样。我们可以通过如下语法直接定义数组:类 数组名对象数量;/这里的对象数量只能是常量,如100.我们还可以通过c+的new和delete语句创建和销毁动态数组,如:类 *数组名=new 类对象数量0;/这里的对象数量可以是变量。特别需要注意的是:凡是使用new创建的对象和对象数组,均需要调用delete语句进行释放,否则会使得我们用c+开发的应用程序耗尽系统资源。释放的语法如下:delete 数组名实验步骤1、设计一个学生类。这个学生类有两个成员变量,一个是学号,一个是姓名。该学生类还具有一个output成员,负责输出学号和姓名,在其构造函数和析构函数中输出相应提示。2、编写测试用例1,创建学生类的数组,并初始化其成员,调用其方法;3、编写测试用例2,动态创建学生类的数组,初始化其成员,调用其方法,并完成整个数组的销毁编写测试用例3,创建一个学生类的指针数组,默认所有指针值为null,然后创建若干个学生类的对象,将其地址放入这个指针数组。最后通过指针数组统一访问这组学生对象。六、调试过程及实验结果测试用例1:第一次出错,因为在头文件中忘了引用string,第二次成功。测试用例2:第一次调试的时候显示没有默认构造函数,并且无法调用指针数组,在试过多次调用方法后终于找到了一种对的方法。测试用例3:本用例主要的时间花在了通过指针数组统一访问这组学生对象的实现,在这个过程中我有和同学交流,在同学的提示下才顺利完成的。七、总结在完成老师的第一个要求之后,基本上三个测试用例的构造函数都是差不多的,只是稍有不同,但总的思想是一样的。而完成这三个测试用例的主要部分是创建学生类的数组,动态创建学生类的数组,创建一个学生类的指针数组,并且初始化其成员,调用其方法。通过多次的失败,我找到了实现其方法,使我对创建学生类的数组,动态创建学生类的数组,创建一个学生类的指针数组的方法有所了解,有所认识。八、附录测试用例1:#include stdafx.h#includeiostream#includestringusing namespace std;class studentprivate:string students_number;string name;public:student(string a, string b)students_number = a;name = b;cout 学生对象被创建 endl;output();student() cout 学生对象被销毁 endl; void output()cout 学号: students_number endl;cout 姓名: name endl;int main() student s4 = student(1008060105, 好男人曾小贤), student(1008060104,关谷神奇), student(1008060103,张伟), student(1008060102,吕小布);return 0;测试用例2:#include stdafx.h#includeiostream#includestringusing namespace std;class studentprivate: string students_number;string name;public:student()void setname(string a)name = a;void setstudents_number(string b)students_number = b; string getname()return name;string getstudents_number()return students_number;void output()cout 学号: students_number endl;cout 姓名: name endl; ;int main() student *ptr;ptr=new student4; string name4 = 周杰伦, 罗志祥,赵又廷,阮经天;string s_no4=1008060105,1008060104,1008060103,1008060102;for(int i=0; i4;i+)ptri.setname(namei);ptri.setstudents_number(s_noi); ptri.output();delete ptr;return 0;测试用例3:#include stdafx.h#includeiostream#includestringusing namespace std;class student private: string name; string students_number;public: void set_students(string a,string b);void output();void student:set_students(string a,string b) name=a; students_number=b;void student:output() cout学号:nameendl; cout姓名:students_numberendl;int main() student st4; student *ptr; ptr=&st0; st0.set_students(杨忠豫,1008060105); st1.set_students(唐松,1008060104); st2.set_students(任胖子,1008060111); st3.set_students(卢浩,1008060123); for(student *ptr=st;ptroutput(); ;return 0;贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:5月12日5月19姓名:杨忠豫 学号:201008060105指导教师:程欣宇实验序号:四实验成绩:一、实验名称实验四、类的继承二、实验目的及要求1、掌握类复用的方式之一:继承;2、熟悉对象发生继承时,对象占用内存的情况,基类和派生累创建和销毁的顺序;3、熟悉公有、私钥、保护类型在各种继承方式(特别是公有继承)方式下,派生类对基类成员的访问权限,非派生类对派生类成员的访问权限。4、理解虚函数的应用。三、实验环境visual c+ (版本不限)四、实验内容验证性部分:1. 定义一个基类animal,有私有整型成员变量age,构造其派生类dog,在其成员函数setage(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。2. 定义一个基类baseclass,有整型成员变量number,构造其派生类derivedclass,观察构造函数和析构函数的执行情况。设计性部分:3.封装一个图形类(shape),作为基类,定义求面积的虚函数,从shape类派生出矩形类(rectangle),圆形类(circle)、三角形(triangle)类,添加相应的成员变量,比如圆形类的半径,矩形类的边长,每个图形类的派生类重载实现getarea。4、设计一个测试用例,创建一组各种各样的图形对象,使用起基类指针数组管理和遍历访问。五、算法描述及实验步骤1. 编写程序定义基类animal,成员变量age定义为私有的。构造派生类dog,在其成员函数setage(int n)中直接对age赋值时,会出现类似以下的错误提示:errorc2248:age:cannot access private member declared in class animalerrorc2248:age:cannot access private member declared in class animal把age改为公有成员变量后重新编译就可以了。程序名:lab5_1.cpp。2. 编写程序定义一个基类baseclass,构造其派生类derivedclass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。3. 图形是计算机图形化交互常用的访问对象,也是面向对象教学的经典例子。通过最基本的图形类的定义和派生,掌握基类和派生类的分工,掌握基类指针访问派生类对象的方法, 六、调试过程及实验结果验证性部分:只有在age为公有成员时,派生类才可访问,当age为被保护或私有型成员是,程序无法正常执行,也就说明此时派生类无法访问基类成员。设计性部分:七、总结 通过实验了解到只有基类中的公有成员可以被派生类访问,还有在基类与派生类中创建和销毁的过程。在设计性部分用到了虚函数,只有通过虚函数,派生类中的数据才得以在基类中输出。八、附录#include stdafx.h#includeiostreamusing namespace std;class animal public: int age;class dog:public animal public: void setage(int n) age=n; void output() cout请输入信息:agew=w; this-h=h; virtual float get_area() return w*h; ;class triangle:public shape int a,b,c; public: triangle(int a,int b,int c) this-a=a; this-b=b; this-c=c; virtual float get_area()double s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c); ;class circle:public shape int r; public: circle(int r) this-r=r; virtual float get_area() return r*r*3.141592; ;int _tmain(int argc, _tchar* argv) shape *shapes3; rectangle r1(4,5);triangle t1(3,4,5);circle c1(5);shapes0=&r1;shapes1=&t1;shapes2=&c1;for(int i=0;i3;i+)coutget_area()endl;return 0;贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:5月26日姓名: 杨忠豫学号:201008060105指导教师:程欣宇实验序号:五实验成绩:一、实验名称静态成员二、实验目的及要求1、掌握静态的声明和引用语法。2、学会使用面向对象程序设计中的静态成员,代替结构化程序设计中的全局变量;3、能够区分静态成员和非静态成员的使用场合;三、实验环境visual c+ (版本不限)四、实验内容验证题目:设计一个简单矩形类,为其设置一个成员变量,即矩形编号,每次新创建一个矩形时,自动给该矩形一个整数编号,并且在构造函数和析构函数中显示第几号矩形被创建和销毁。选作题目:设计一个剪贴板类,能够设置、获取windows操作系统的文本内容。五、算法描述及实验步骤1、设计一个简单矩形类rectangle,定义静态成员count和非静态成员id,代码如下:class rectangleint id;public :static int count;rectangle()id =count+;cout第id号矩形被创建endl;rectangle()cout第id号矩形被销毁endl;count-;2、在类外部用如下语句初始化改成员:int rectangle:count=0;3、使用如下代码作为主函数的测试代码,记录分析结果:rectangle r10;rectangle *p=new rectangle();delete p;cout目前一共有rectangle:count个矩形endl;return 0;4、选作题目提示4.1访问windows api需要include windows.h;4.2设计一个clipboard类,在其中定义一个static方法bool gettext(char buffer),将以下代码复制进去。openclipboard(null);/打开windows剪贴板handle hmem= getclipboarddata(cf_text);/获取文本对象句柄if (hmem=null) return false;char *str= (char*)globallock(hmem);/锁住文本对象获取文本strcpy(buffer,str);globalunlock(hmem);/解锁文本对象closeclipboard();/关闭windows剪贴板return true;4.3 在clipboard类中添加一个static方法void settext(char *text),将以下代码复制进去。int size=strlen(text)+1;/计数字符数据长度hglobal hmem=globalalloc(ghnd,size);/申请全局内存对象char *p=(char *)globallock(hmem);/锁定全局内存对象memcpy(p,text,size);/将数据复制到全局内存对象openclipboard(null);/打开剪贴板emptyclipboard();/清空系统剪贴板setclipboarddata(cf_text,hmem);/设置剪贴板内容closeclipboard();/关闭剪贴板globalfree(hmem);/释放全局内存对象4.4 在主函数中编写如下代码char buf256;if (clipboard:gettext(buf)=true)coutbufendl;elsecout系统剪贴板无文本endl;clipboard:settext(science,democracy,freedom);4.5 在任意一个程序中复制一段文本,然后运行本实验程序,观察输出。然后在任意程序中选择粘贴文本。六、调试过程及实验结果七、总结 类的静态数据成员是类的数据成员的一种特例,要用static关键字来声明。静态成员不属于任何一个具体的对象,而是被整个类所共有。静态成员函数可以直接访问该类的静态数据,而访问非静态成员,必须要通过对象名。八、附录#include stdafx.h#includeiostreamusing namespace std;class rectangle static int count;int num;public:rectangle()num=+count;cout第num号矩形被构造endl;rectangle() cout第num号矩形被析构endl;int rectangle:count=0;int _tmain(int argc, _tchar* argv) rectangle r10; return 0;#include stdafx.h#includeiostream#includewindows.husing namespace std;class clipboardpublic:static bool gettext(char buffer) openclipboard(null);/打开windows剪贴板handle hmem= getclipboarddata(cf_text);/获取文本对象句柄if (hmem=null) return false;char *str= (char*)globallock(hmem);/锁住文本对象获取文本strcpy(buffer,str);globalunlock(hmem);/解锁文本对象closeclipboard();/关闭windows剪贴板return true;voidstatic settext(char *text)int size=strlen(text)+1;/计数字符数据长度hglobal hmem=globalalloc(ghnd,size);/申请全局内存对象char *p=(char *)globallock(hmem);/锁定全局内存对象memcpy(p,text,size);/将数据复制到全局内存对象openclipboard(null);/打开剪贴板emptyclipboard();/清空系统剪贴板setclipboarddata(cf_text,hmem);/设置剪贴板内容closeclipboard();/关闭剪贴板globalfree(hmem);/释放全局内存对象;int _tmain(int argc, _tchar* argv) char buf300; if (clipboard:gettext(buf)=true)coutbufendl; elsecout系统剪贴板无文本endl; clipboard:settext(science,democracy,freedom); return 0;贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:6月26月9日姓名: 杨忠豫学号:201008060105指导教师:程欣宇实验序号:六实验成绩:一、实验名称模板函数和模板类二、实验目的及要求1、了解模板函数和模板类的作用;2、掌握模板函数和模板类的使用;3、掌握实现模板函数和模板类的定义和实现。三、实验环境visual c+ (版本不限)四、实验内容1、模板函数的定义和使用2、用模板的方法定义一个交换函数swap,能够交换两个对象的值。3、定义一个链表模板类,该模板类能够定义任意元素类型的链表。(选作)五、算法描述及实验步骤模板是程序设计语言的一种多态性。使用模板函数和模板类,我们可以将要出来的数据类型和算法分离开来。c+的模板函数和模板类是根据使用代码传人的类型参数,在编译时完成的数据类型检查和关联,在运行时已经不需要做类型检查,因此使用模板类和模板函数,在获得其编码方便性的同时,不会而降低程序运行性能。1、模板函数的定义和使用定义一个max函数,能够比较任意的int、float、double类型;定义一个矩形类,传入两个矩形对象到max函数进行比较,记录和分析编译结果;2、用模板的方法定义一个交换函数swap,能够交换两个对象的值。传入矩形对象、整型数,进行交换,记录和分析运行结果。3、定义一个链表模板类,该模板类能够定义任意元素类型的链表。要求实现链表的添加结点和查找结点的成员函数。六、调试过程及实验结果主函数中定义了两个矩形类的对象r1和r2,其中r1的宽为10,高为4,r2的宽为4,高为5。首先通过max函数输出面积较大的三角形的宽和高。然后再通过swap函数将两对象的宽和高依次调换,再输出,得到如下结果。七、总结 声明模板的关键字template,模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板函数与对象相似。是函数模板的实例,具有程序代码。占用内存空间。在说明了一个类模板后,也可以创建类模板的实例。八、附录#include stdafx.h#includeiostreamusing namespace std;template t max (t a,t b) if(ab) return a; else return b;class rectangleint w,h;public: rectangle(int w,int h) this-w=w;this-h=h;void output() coutw=w h=h(rectangle other)return w*hother.w*other.h;templatevoid swap(t &a,t &b)t c;c=a;a=b;b=c;int _tmain(int argc, _tchar* argv) rectangle r1(10,4),r2(4,5); rectangle r3=max(r1,r2); r3.output(); swap(r1,r2); cout交换两个对象的值:endl; r1.output(); r2.output();return 0;贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:面向对象程序设计实验班级:计科103实验日期:6月26月9日姓名:杨忠豫 学号:201008060105指导教师:程欣宇实验序号:七实验成绩:一、实验名称设计模式之抽象工厂二、实验目的及要求1、了解面向对象设计模式;2、了解uml类图;3、掌握抽象工厂模式的原理和扩充工厂的方法。三、实验环境visual c+ (版本不限)四、实验内容1、阅读分析老师给出的抽象工厂的代码;2、增加产品;3、增加工厂;4、找出生活中的其它例子,用抽象工厂来模拟;五、算法描述及实验步骤设计模式是设计中解决特定类型问题所总结出的特定模式。经典的面向对象设计模式有23种,其中抽象工厂模式是其中非常有用和能够体现设计模式思想的一种。我们通过对抽象工厂的简单模仿学习,初步了解面向对象设计模式的意义。抽象工厂的uml类图如下所示:下面的代码用抽象工厂模式表达不同人种具有不同的肤色和头发。其中

温馨提示

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

评论

0/150

提交评论