ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:300.38KB ,
资源ID:4332783      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4332783.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(东北大学软件学院C++实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

东北大学软件学院C++实验报告.docx

1、东北大学软件学院C+实验报告课程编号:B080101020C+程序设计实验报告姓名学号班级指导教师实验名称C+ 程序设计综合实验开发与总结开设学期2016-2017学年第一学期开设时间第15周第18周报告日期XXXX评定成绩评定人XXX评定日期2016-01-12东北大学软件学院1. 实验目的实验一1)学习编写简单的C+程序,并掌握C+程序的基本格式与规范。2)练习重载函数的使用,掌握指针的使用方法。3)学习标准输人输出及格式控制。4)学习使用VC +的debug调试功能,使用step into追踪到函数内部。实验二1)学习并掌握类与对象的定义、使用、声明。2)学习具有不同属性的数据成员与成员

2、函数的访问方式。3)理解构造函数和析构函数的定义与执行过程。4)理解什么是运算符重载,掌握运算符重载的方法实验三1)学习定义和使用类的继承关系,定义派生类。2)熟悉不同继承方式下对基类成员的访问控制。3)学习使用虚函数实现动态多态性。4)学习利用虚基类解决二义性问题。实验四1)加强对模板相关概念的理解,熟悉模板编程的语法。2)学习编写简单的函数模板和类模板。3)理解STL中容器、算法、迭代器的等概念,明确它们之间的关系。4)掌握STL中Vector容器的使用方法。2. 实验环境编译器:Microsoft Visual C+ 6.0 操作系统:Windows 103. 实验内容与实验过程及分析实

3、验一项目一:内容:使用动态数组完成编写并测试3X3矩阵转置函数,使用数组保存3X3矩阵,使用指针实现函数的功能。代码:main() int i,j; int *p; p=new int*3; cout输入矩阵的元素:endl; for(i=0;i3;i+) pi=new int3; for(j=0;jpij; transpose(p); cout 转置后的矩阵的为: endl; for(i=0; i3; i+) for (j=0; j3; j+) cout pij ; cout endl; delete p;void transpose (int *matrix) int i,k,j; for

4、(i=0;i3;i+) for(j=0;ji) k=matrixji; matrixji=matrixij; matrixij=k; 运行结果:总结: 传递二维数组时候通过指针传递,可以对数组进行修改,方便了许多。项目二:内容:编写程序,读写指定的文件,在每一行前加行号后,将结果输出到屏幕代码:void write() ofstream out(test.txt); if (out.is_open() out 第一行n; out 第二行n; out 第三行n; out 第四行n; out 第五行n; out 第六行n; out.close();void read() char buffer88

5、; ifstream in(test.txt); if (!in.is_open() cout Error opening file; exit(1); while (!in.eof() in.getline(buffer, 80); cout buffer endl; in.close();void main() cout 写文件 endl; write(); cout 读文件 ”操作符的原型为:istream& operator(istream&, CPoint&);重载的“(ostream&, CPoint);思考一下,重载的“”操作符和“”操作符能否作为CPoint类的成员函数来实现。

6、代码:#include#includeclass CPointprivate: int x,y; static int nCount ;/ nCount用于保存点的个数public: CPoint(int px=0,int py=0):x(px),y(py) /构造函数,这个地方一定要写函数体内容,不然没有初始化的话会导致运行出错。 /CPoint(CPoint&); CPoint()/这是析构函数 int GETX() const return x; int GETY() const return y; void SetX(int a) x=a; void SetY(int b) y=b;

7、void ShowPoint() cout(x,y); CPoint operator+ (CPoint& cp2) return CPoint(GETX()+cp2.GETX(),GETY()+cp2.GETY(); ; friend CPoint operator-(CPoint& cp1,CPoint& cp2);/声明为友元函数 /输入输出运算符只能用友元函数重载 friend ostream &operator(istream &is,CPoint &c);CPoint operator-(CPoint& cp1,CPoint& cp2) return CPoint(cp1.x-cp

8、2.x,cp1.GETY()-cp2.GETY();/不要逗号ostream & operator(ostream &os,const CPoint &c) cout 重载直接输出对象得到: (c.GETX(),c.GETY()(istream &is,CPoint &c) is c.xc.y; return is;class CLineprivate: CPoint pt1, pt2;/pt1和pt2分别代表该线段的起点和终点public: CLine()/构造函数 CLine(int x1,int y1,int x2,int y2) :pt1(x1,y1),pt2(x2,y2) /必须以参

9、数列表的形式来写,这样才能在声明的时候即初始化 CLine(CPoint p1,CPoint p2) :pt1(p1),pt2(p2) /必须以参数列表的形式来写,这样才能在声明的时候即初始化 double Distance() int a=pt1.GETX()-pt2.GETX(); int b=pt1.GETY()-pt2.GETY(); double distance=sqrt(a*a+b*b); return distance; /计算该线段长度的成员函数 void ShowLine() pt1.ShowPoint(); cout-; pt2.ShowPoint(); ;int mai

10、n() CPoint cp1(2,4); CPoint cp2(3,6); CPoint cp; cout两个点分别是; cp1.ShowPoint(); cp2.ShowPoint(); cp=cp1+cp2;/两个点相加 coutendl; cout两个点相加的结果是; cp.ShowPoint(); cp=cp1-cp2;/两个点相减 cout两个点相减的结果是; cp.ShowPoint(); coutendl; CLine line1(1,3,5,0); CLine line2(cp1,cp2); cout线段1是; line1.ShowLine(); coutendl; cout线

11、段2是; line2.ShowLine(); coutendl长度为line1.Distance()endl; cout 直接创建一个点,请输入两个值:; CPoint LoadPoint; cinLoadPoint; coutLoadPoint;/重载直接输出对象 return 0;运行结果:总结:通过C+重载运算符的操作,可以让编程者自定义各个操作符的运算规则,简化了程序的编写逻辑和过程。实验三项目一:内容:使用实验2中的CPoint类,定义 “空间中点”类如下:class CThreePoint:public CPointprivate: int z;public: CThreePoin

12、t(); CThreePoint(int, int, int); int GetZ(); void SetZ(int pz); virtual void ShowPoint();完成该类中各成员函数的定义。并利用VC调试工具观察含有继承关系类的构造函数和析构函数的执行情况。代码:#include#includeclass CPointprivate: int x,y; static int nCount ;/ nCount用于保存点的个数public: CPoint(int px=0,int py=0):x(px),y(py) /构造函数,这个地方一定要写函数体内容,不然没有初始化的话会导致运

13、行出错。 /CPoint(CPoint&); CPoint()/这是析构函数 int GetX() const return x; int GetY() const return y; void SetX(int a) x=a; void SetY(int b) y=b; virtual void ShowPoint()/只有把它设置为虚函数时候才会出现(8,9)(3,2,5)的输出结果。否则都是(8,9)(3,2) cout(x,y); ;class CThreePoint:public CPointprivate: int z;public: CThreePoint()/无参构造 CThr

14、eePoint(int px=0,int py=0,int pz=0) SetX(px); SetY(py); z=pz; int GetZ() return z; void SetZ(int pz) z=pz; virtual void ShowPoint() cout(GetX(),GetY(),zShowPoint(); pt=&ctp; pt-ShowPoint(); return 0;运行结果:总结:C+中的继承、虚函数,多态,数据的封装,构造函数的实现等等各种面向对象程序设计的特性,方便进行现象化描述,通过对这一部分的学习,对于C+中的类的概念进一步巩固,基于对JAVA的学习,现在

15、对于C+中多态、继承有了较多的了解。项目二:内容: 定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。代码:#includeclass vehiclepublic: int MaxSpeed; int Weight;virtual void Run(

16、) /执行该方法则开始运行 cout开始运行,速度为MaxSpeedendl; virtual void Stop() /执行则停止运行 cout停止运行endl; ;class bicycle:virtual public vehiclepublic: int Height;class motorcar:virtual public vehiclepublic: int SeatNum;class motorcycle:public bicycle,public motorcarpublic:int style;main() vehicle v;v.MaxSpeed=10;bicycle b

17、;b.MaxSpeed=5;motorcar mcar;mcar.MaxSpeed=20;motorcycle mb;mb.MaxSpeed=15;/如果不设置成为虚基类的话则该行代码编译不通过vehicle *pt=&v;coutRun();pt-Stop();pt=&b;coutRun();pt-Stop();pt=&mcar;coutRun();pt-Stop();pt=&mb;coutRun();pt-Stop();/*vehicle开始运行,速度为10停止运行bicycle开始运行,速度为5停止运行motorcar开始运行,速度为20停止运行motorcycle开始运行,速度为15停

18、止运行*/运行结果:总结: 学习了虚函数以及虚基类的使用以及作用。虚函数、虚基类的使用对于C+的多态继承有更大的便利性。实验四项目一:内容:编写一个函数模板,要求它返回两个值中的最小者。但同时要确保正确处理字符串。代码:#include#include using namespace std;template T min(T a, T b) T c; c = (ab) ? a : b; return c;char *min(char *a, char *b) return strcmp(a, b)0 ? a : b;void main() cout 请输入两个整数: t1 t2; cout 最

19、小的是: min(t1, t2) endl; system(pause);运行结果:总结: C+中模板的一个作用就是对同一类型的函数,进行不同参数类型的适配,比较人性化。同时也方便了编程者进行对类库的封装,写出一个框架来。项目二:内容:编写一程序,让用户自由地从键盘上输入整数,直到输入数字0时结束。把用户输入的数据保存在模板类Vector定义的对象中,并对用户输入的所有数进行排序输出。在向显示器进行输出时,要求用一下3种方式实现:a)仅使用Vector的相关成员函数,不使用迭代器进行输出;b)使用迭代器自己编程输出;c)使用STL提供的通用算法for_each进行输出。代码:#include

20、#include #include using namespace std;void show(int n);void main() vector a; int n = 0; do cin n; a.push_back(n); while (n != 0); for (int x = 0; (unsigned int)xa.size(); x+) for (int y = x; (unsigned int)yay) int z = ax; ax = ay; ay = z; for (int i = 0; (unsigned int)i = a.size() - 1; i+) cout ai ;

21、 cout endl; vector:iterator start = a.begin(); vector:iterator end = a.end(); while (start != end) cout *start ; +start; cout endl; for_each(a.begin(), a.end(), show); cout endl;void show(int n) cout n ;运行结果:(输出结果包含三种实现方式)总结: C+中对于数据的存储有较多种方式,这里实现一种存储并排序输出。掌握了Vector的使用及其技巧。4. 实验总结从接触的第一门面向对象的语言JAVA开

22、始,就对这种以对象形式来编程的方式产生了兴趣。现在,又学习了C+,我对C+这种面向对象的编程语言的语法有了大致的掌握,由于学过JAVA语言,所以面向对象的思想掌握的不是很慢,但是比较吃力的就是C+中既融合了C的指针思想,又具有JAVA的引用变量思想,还有就是析构函数的引入,编程人员自己在内存中分配内存,而且用完之后要自己调用相应的函数去释放,所以操作实现起来稍显困难,不过这也是C+不同于JAVA之处对机器配置要求不是太高。 C+编程的一些基本方法,是融合了C语言以及JAVA的,学会了C+语言的基本语法,面向对象类的设计思想,我也还学会了如何自己从网上寻找资源,如何自学新东西,相信这次实验学到的

23、知识在我未来的学习个工作道路上都会是宝贵的财富,并且会在以后的编程之路上给予我较大的帮助。5. 思考题实验一:1.1.重载函数是通过什么来区分?答:参数类型、数量、顺序。1.2.C+提供的输入输出操作与C语言的输入输出操作的异同点?答:同:都可以通过输入设备输入并将数据显示出来。异:C+不用指定输出类型。1.3.C+都定义了那些流?他们分别与什么设备相连?答:C+定义了io流,与输入输出设备相连。实验二:2.1.类和结构体的区别是什么? 答:成员访问权限不同,继承方式不同。结构体不提供继承机制,类提供继承机制,实现代码复用;类可以实现多态,结构体不支持。结构体中的数据默认方式是public的,

24、而类是private的。2.2.类的成员函数与普通的函数有何区别? 答:类的成员函数是成员的特有方法,而普通函数能够随意被调用。2.3.构造函数和析构函数的作用是什么? 答:初始化对象,分配内存空间,释放内存空间。2.4.类的访问控制权限有何意义?答:保护成员变量,可以将类中的具体细节封装起来。实验三:3.1.C+中有哪几种派生方式?每种方式的派生类对基类成员的继承和访问控制属性是什么样的? 答:有public,private,protected派生。 public派生,在派生类里和外面都可以直接调用基类的公有部分。 protected保护派生,在派生类里可以直接调用,但是在派生外面不可以调用。 private私有派生,在派生类里和外面都不可以直接调用,但可以用函数间接调用。3.2.派生类对象和基类对象是什么样的关系?派生类对象的构造函数和析构函数的执行顺序是怎样的?答:派生类对象是基类对象的扩展;执行派生类构造函数时先执行基类构造函数,构造一个基类对象;执行派生类析构函数时先执行派生类析构函数,再执行基类析构函数。3.3.什么是多态?在C+语言中,是如何实现多态的? 答:多态是指接口的不同实现形式。 可以通过虚函数,抽象类,重载,覆盖,模板实现。实验四:4.1.谈谈使用模版进行编程的优点?答:使

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1