![C++程序设计实验讲义_第1页](http://file4.renrendoc.com/view/a73e43c78f935de27165d9d51d113b36/a73e43c78f935de27165d9d51d113b361.gif)
![C++程序设计实验讲义_第2页](http://file4.renrendoc.com/view/a73e43c78f935de27165d9d51d113b36/a73e43c78f935de27165d9d51d113b362.gif)
![C++程序设计实验讲义_第3页](http://file4.renrendoc.com/view/a73e43c78f935de27165d9d51d113b36/a73e43c78f935de27165d9d51d113b363.gif)
![C++程序设计实验讲义_第4页](http://file4.renrendoc.com/view/a73e43c78f935de27165d9d51d113b36/a73e43c78f935de27165d9d51d113b364.gif)
![C++程序设计实验讲义_第5页](http://file4.renrendoc.com/view/a73e43c78f935de27165d9d51d113b36/a73e43c78f935de27165d9d51d113b365.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++程序设计实验讲义软件学院C卄教学团队目录TOC\o"1-5"\h\z实验1 在小范围内用C++增强C的功能 3\o"CurrentDocument"实验2 类的定义与应用 5\o"CurrentDocument"实验3 this指针、常量和静态成员和友元函数的使用 8\o"CurrentDocument"实验4派生与继承 13\o"CurrentDocument"实验5 多态性 16\o"CurrentDocument"实验6 IO流上机实验 20\o"CurrentDocument"实验7运算符重载、模板 23\o"CurrentDocument"实验8 windows程序设计 26在小范内用在小范内用C++增强C的功能实验目的和要求目的:快速掌握C++语言编程的方法,在小范围内增强C卄的功能,主要内容有:(1)输入流、输出流的使用;(2)函数原型;(3)new和delete运算符分配内存。实验内容:(1) 编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。并输出计算结果,如:23+123=146。(2) 用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入3x3整型数组的数据,并计算出所有元素之和,打印出最人值和最小值。输入输出要用流运算符实现。(3) 编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?(4) 在主函数中定义2个整型元素a,b,用引用作函数参数的方法,在函数voidswap(mt&x,mt&y)中实现将数据交换存放,并在主函数中打印出来。(5) 假设我们班有50名同学,每个同学都报出自己的生口,每个同学的生口都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725x10-7。相重复的概率如此之人与我们主观想象不同。写一个程序,输入同学的人数n计算出其生口不重复的概率。然后在用彷真的方法,利用随机数产生每个同学的生口,计算出生口不重复的概率并与前面的结呆进行比较。[学生的生口可以用随机数产生,randO产生0—32767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(longmt*)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子,以上函数需要包含头文件stdlib.h]思考题:结合上机的体会,回答卞列问题.(I) C卄引入了I/O流运算符,与C语言相比,它们好处是什么?(2) 引用是C卄的很重要的功能,在函数定义中,如何使用引用?(3) 函数重载设计不当会产生二义性问题,二义性主要体现在参数隐式类型转换和默认参数两个方面,举例说明两个问题,你认为该如何解决。(4) C++中define与const定义常量有什么区别?实验2类的定义与应用1、实验目的和要求:掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。理解构造函数和析构函数的作用和运行实际,掌握拷贝构造函数的作用。并熟练掌握复杂对象类型的运用。2、实验内容:定义一个时间类Time,它能提供由时分秒组成的时间。要求能够修改时间和打印出时间。编写一个计数器类,定义一个私有数据成员,通过两个成员函数,分别使其完成加1和减1操作。用构造函数数据成员初始化为0,输出函数可以输出数据成员函数的值。设计一个时间类,要求包含以下功能:数据成员:时、分、秒成员函数:各种构造函数析构函数4以通过函数分别设置时间的各个组成部分也可以整体设置时间有一个tick函数,负贵给当前时间加1秒钟,然后输出新的时间定义一个分数类如下,要求实现各个成员函数,并在主函数中测试两个分数的加减乘除等运算。classRational{public:Rational(int 构造RationalR_add(Rational&A);〃加RationalR_sub(Rational&A);〃减voidR_mul(Rational&A);〃乘voidR_div(Rational&A,Rational&E);〃除voidsimple(); 〃约分voidprmtQ; 〃以分数形式显示,注意约分private:bitm;〃分母mtn;〃分子};定义一个类包含一个整型数的指针变量,在构造函数中用new分配10各整型数的内存空间,在析构函数中用delete释放内存空间,并编写给内存空间赋值和输出函数。编写类String的构造函数、析构函数已知类SMng的原型为:classString{public:Stiiiig(constchar*sti=NULL);//普通构造函数Stimg(constStimg&other);// 贝构造函数〜Striiig(void);//析构函数private:chai*m_data;//用于保存字符串};请编写Strmg的上述3个函数。并编写一个主函数,在主函数中对所编写的成员函数进行测试。定义和实现类Airayo数据成员有包含了10个元素的数组,成员函数GetData.有一个整形数参数1,函数返回下标为1的元素值,对一个数组元素的引用,成员函数Pont打印出数组的值。构造函数将数据成员的所有数组元素初始化为0。还有一个input成员函数为数组赋值。定义类Point.要求定义类对象时,可以有这样的定义语句:Poiiitpl(l,2),p2(pl);存include<iostream.h>classPomt{public:Pomt(inta,mtb){x=a;y=b;}voidftin(Point&p);voidftin(Point*p);private:Ultx,y;void/*Point::*,fun(Point&p)ix=p・x;y=p・y;cout«"The &p)H«endl;}voidPoint::fun(Point*p)ix=p->x;cout«"Fun(Point*p)n«endl;Voidmaiii(){Pointp(l,2),q(3,4);p. ftm(q);q. ftm(&q);}改正程序中小的错误,给出程序运行的结果,并对程序进行分析。3、思考题:结合编程实践回答卞列的问题。结合第一个例子,说明什么是类?什么是对彖?你是如何理解类和对彖的?面向对彖的程序设计与结构化程序设计有何不同?拷贝构造函数那些情况下会被调用,分别给出例子?实验3this指针、常■和静态成员和友元函数的使用1、 实验目的和要求:掌握显式使用this指针的方法掌握静态数据成员的意义及使用方法掌握常量数据成员和常量成员函数的意义和使用方法掌握友元函数和友元类的使用方法2、 实验内容:有如下类的定义。类成员函数copy用于实现两个对彖的相互拷贝,请完成该函数的实现。(有两种方法即不用this指针和用this指针)#mclude<iostream.h>classMyclass{public:Myclass(iiita.iiitb){x=a;y=b;}Vbidcopv(Mvclass&my);voidprint(){cout«ux=>,«x«endl;cout«ny=>>«y«endl:}private:intx,y;};voidniainQ{Myclassmy(10,20),t(30,40);my.prmt();my.Copv(t);my.print();}设计一个类,实现两个复数的四则运算。实现加减乘除功能的函数用友元函数实现。(3)分析下面程序,给出横线部分的语句,并分析程序的输出,和的功能。#include<iostreain>usingnamespacestd;classA{staticiiitm_counter;public:A();~A();staticvoiddisplayQ;} 〃将ni_countei初始化为0;A::A(){ni_countef++;}A二〜A(){m_counter—;}voidA::displayQ{cou^^Thereare:,7«A::m_counter«,,objectsofclassA・\n”;}mtniainQ{Aal;Aa2;Aa3;A::displav();al.displayQ;}(4)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要记录下目前库存的货物的总重量和总价值。编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的情况。(本题目主要练习静态数据成员的使用,定义私有变屋存每件货物的价格和重量,用静态数据成员存货物的总重量和总价钱,定义构造函数和析构函数,当定义新的对彖完成初始化的功能和删除对彖时,从总重量和总价钱中减去对彖的重量和价格)(5)静态成员练习o编写一个类Node,声明一个数据成员member和已经静态成员count,另构造函数初始化数据成员,并把静态数据成员加1,另析构函数把静态数据成员减1。。在1)的基础上编写应用程序,创建3个对彖,然后显示他们的数据成员和静态成员,再析构每个对彖,并显示他们对静态数据成员的影响。。修改2),让静态成员函数访问静态数据成员,并让静态数据成员是私有的。个类分别为整型数集合类和实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。如:classIntset{private:mtnum[3];public:Intset(intxjnty.mtz){//添加初始化内容}voidpiint(){//打印数据}};classfloatset{private:floatnum[3];public:floatset(floatx,floaty,floatz){〃添加初始化内容}voidpiint(){〃打印数据}在hitset中再增加一个成员函数,将对彖的整型数据拷贝的到floatset的对彖中此成员函数的原型为:voidsettofloat(floatset&set);〃形参为拷贝的目标对象办法需要调用函数,程序的开销较人,可以定义一个友元函数来实现上述的功能。请分别完成两个程序。分析以下程序的功能,把程序用三种方法(公有数据成员、友元、用成员函数访问私有数据成员)补充完整,实现对对彖peppy的成员#include<iostreain.h>classAnimal;voidSetValue(Anuiial&、iiit);voidSetValue(Aniiiial&、iiit.mt);classAnimal{public:AiimialQ:itsWeight(O)jtsAge(O){}voidshow。{cout«itsWeight«endl«itsAge«endl;}protected:intitsWeight;intitsAge;};voidSetValue(Aniiiial&ta,inttw){//设置itsWeight值}voidSetValue(Aniiiial&ta,inttw、inttn){//设置itsWeight和itsAge值iiitmainQAiimialpeppy;SetValue(peppy?5);peppv.show();SetValue(peppy,7、9);peppv.show();return0;}设计一个整数链表类,满足栈操作。即,总在链表首插入结点,总在链表首取出(删除)结点。类中需有记录结点个数的数据成员。如果链表为空,而要做取出结点操作,则类必须给出错误信息。编写应用程序,取100次随机数(范围10-200),每取到比前一个随机数大时,放入链表中,否则,略去。然后逐个取出,求其和。用堆分配方法逐个产生满足条件的结点,插入链表中。每当从链表中取出一个结点时,要及时将结点删除。求和工作不要在链表类中完成,以使该链表类具有通用性。3、思考题:结合编程实践回答卞列的问题。什么是this指针,它的主要作用是什么?总结静态成员的特点。实验4派生与继承1、 实验目的和要求:此实验用两个单元的时间完成,是一个综合性的实验,要求编写的程序涉及到c卄的许多知识点,如类的定义,动态分配内存,构造函数,派生,虚基类等。实验内容给出的是一个完整的程序,4个题目实际是类等级。同学也可以在此基础上发挥增加新的内容。2、 实验内容:定义一个基类MyAnay,基类中可以存放一组数组。ClassMyanay{mt*alist;iiitlength;public:Myarray(intleng);^mvanay()>voidmputQ;voiddisplayQ;};编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能。并进行调试。定义一个类averanav继承自myairay,在类中求数组的平均值,并输出。进行调试。定义一个类revarray继承自myarray,使数组按反序存放,并输出。进行调试。定义一个类Nawarray继承自averarray和levarray0在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。读程序,回答问题#include<iostreain>usingnamespacestd;classApublic:voidfl();A(){il=10jl=U;}protected:mtjl;private:intil;};classBprivateA{public:voidf2();B()02=2Oj2=21;}protected:mtj2;private:mti2;};classC:publicB{public:voidf3();CO{i3=30j3=31;}protected:mtj3;private:inti3;};回答下列问题:派生类B中成员函数f2()能否访问基类A中的成员fl()、订和jl?派生类B的对彖b能否访问基类A中的成员flQ.11和jl?派生类C中成员函数f3()能否访问直接基类B中的成员£2()、12和J2?能否访问间接基类A中的成员fl。、J1和11?派生类C的对彖c能否访问直接基类B中的成员£2()、12和J2?能否访问间接基类A中的成员fl()、J1和订?编写一个程序,实现字符串操作:一个简单串类string,包含输入字符串、返回字符串长度及内容等功能;另有一个具有编辑功能的串类edit_strmg,它继承stnng类,在其中设置一个光标,使其能支持在光标处的插入、替换和删除等编辑功能。实验5多态性1•实验目的和要求:理解多态性、虚拟函数、抽象类和具体类、静态绑定和动态绑定等概念学会利用虚函数来实现多态性,以便更好地来扩展和维护系统理解C++如何实现虎拟函数和动态绑定(*)实验内容:以下是一个计算正方体、球体和圆柱体的面枳和体积的程序。试分析程序并写出程序的运行结呆,然后上机运行验证。#iiiclude<iostieam.h>classcontainer{protected:doubleradius;public:contamer(doubleradius){container::iadius=radius;}virtualdoublesurface_area()=O;virtualdoublevolume()=0;};classcube:publiccontainer{public:cube(doubleradius):container(radius){};doublesurface_aiea()returnradius*iadius*6;}doublevolume()returniadius*radius*radius;}};classspheie:publiccontamer{public:sphere(doubleiadius):contamei(radius){};doublesurface_aiea(){return4*3.1416*radius*radius;}doublevolumeQ{return3.1416*iadius*radius*radius*4/3;}};classcylind亡匸publiccontamer{doubleheiglit;public:cyliiider(doubleradius,doubleheight):contamer(radius){cylinder::height=height;}doublesurface_area()return2*3.1416*radius*(height+radius);}doublevolume()return3.1416*iadius*radius*height;}};voidmain(){container*p;cubeobjl(10);sphereobj2(6);cylinderobj3(4、5);p=&objl;cout«"输出结果:,r«endl;cout«M正方体表面积:,,«p->suiface_area()«endl;cout«M正方体体积:,,«p->volume()«endl;p=&obj2;cout«M球体表面积:"«p->suiface_aiea()«endl;cout«M球体体积:H«p->volume()«endl;p=&obj1;p=&obj3;cout«M圆柱体表面积:"«p->suiface_aiea()«endl;cout«M圆柱体体积:,,«p->volume()«endl;}实现下图中的Shape层次结构。每个TwoDunensionalSliape类应包括成员函数getAiea,以计算:维图形的面积。每个TliieeDimensionalShape类包含成员函数getAiea和getVolume,分别计算三维图形的表面积和体积。编写一个程序,使用层次结构中每个具体类的对彖的Shape向屋指针。程序要打印出向量元素所指的对象。同样,再将所有形状存入向量的循环中,要能判断每个图形到底属于TwoDmiensionalShape还是属于TlueeDmienionalShape。如果某个图形是TwoDmiensionalShape就显示其面积,如果某个图形是ThieeDmiemonalShape,则显示其面积和体枳。(3)编写一个程序,先设计一个链表List类,再从链表类派生出一个集合类Set类,再集合类中添加一个记录元素个数的数据项。要求可以实现对集合的插入、删除、查找和显示。结合上机体会,回答下列问题(1) 多态性是如何让程序“普遍化”而非“特殊化”的?试说明程序“普遍化”的主要好处。(2) 什么是虚拟函数?请说明虚拟函数适用的坏境。(3) 多态性是如何提高可扩展性的?(4) 说出静态绑定和动态绑定的区别,并试解释说明动态绑定究竞是如何实现的?实验6 10流上机实验实验目的和要求理解I/O流与标准流对象的意义掌握常用的IO成员函数:掌握文件的基本操作理解二进制文件与文本文件的区别熟练掌握文件的顺序读写方法熟练掌握文件的随机读写方法实验内容:由希腊著名数学家埃拉托色尼提出求解素数的''筛选法",阅读程序改正其中的错误,使其能输出100以内的所有素数。改写该程序,将1~Num以内的所有素数按清晰的格式写入文件中。从文件中读出(l<n<m<Num)中的所有素数并统计该区间内素数的个数。#include<iostream>#include<cmath>usingnamespacestd;intmain(){constintMAX=100;boolisPrime[MAX];for(inti=0;i<MAX+l;i++)isPrime[i]=true;isPrime[O]=isPrime[l]=false;//I和0不是素数intn=sqrt(MAX)+1;for(i=2;i<n;i++){〃素数的整数倍不是素数,从而筛选掉所有不是素数的数if(isPrime[i]){for(intj=2*i;j<MAX+1;j=j+i)isPrime[j]=false;}}for(i=2;i<MAX+l;i++)if(isPrime[i])cout<<i<<endl;return0;}课程管理程序设计程序对学生选修课程情况进行记录和管理。一名学生可选修多门课程,每条课程记录包括课程名,学分,选修学期和成绩等信息。要求进行如下操作:输入多个学生的选修课程信息,以清晰的格式写到文件中;修改某个学生的选课记录,增加新选修的课程;在文件中查找某个学生的信息,输出所有选修的课程;删除某个学生的所有选课信息核查所有不满足毕业条件学生名单(如选修学分不足、某学期不及格课程超过3科等)。图书馆管理系统开发图书馆管理系统,完成图书的登记,查询和借阅等功能:定义Book,Reader,Manager等类,管理员拥有对图书信息的录入,查询,修改,增添与删除等权限:读者拥有查询图书和个人借阅信息等权限:要求用文件记录所有图书和用户信息。请给出规范额完整的UML类图,设计书和实现代码。思考题:结合上机的体会,回答下列问题.(1) C卄引入了I/O流实现输入输出,与C语言相比,这种输入输出方法有哪些优点?(2) 文本文件与随机文件有什么本质区别?分别适用于什么情况?(3) 比较随机读写与顺序读写的不同,是否文本文件只能进行顺序读写操作,二进制文件只能进行随机读写操作?(4) 请举例说明IO流中的成员函数getlineO与get()的使用有何区别。实验7运算符重载、模板1、 实验目的和要求:掌握运算符重载的语法要点,学会运算符重载的编程方法。理解函数模板、类模板,应用模板函数、模板类。2、 实验内容先读程序,写出程序的输出结果,再运行程序验证程序的输出。用友元重载方式重新编写程序。#include<iostreain>usingnamespacestd;classVector{public:VectorQ{}Vector(intijntj){x=i;y=^j;}friendVectoroperator+=(Vectorvl,Vectorv2){vl.x+=v2.x;vl.y+=v2.y;leturnvl;}Vectoroperator-=(Vectorv){Vectortemp;temp.x=x-v.x;temp.y=y-v.y;leturntemp;}voiddisplay(){cout«,,(M«x«,7l«y«M)H«endl;}private:mtx,y;};voidmain(){Vectorvl(12),v2(3,4),v3,v4;v3=vl+=v2;v4=vl-=v2;cout«Mvl=H;vl.displayO;cout«Hv2=H;v2.display();cout«Hv3=H;v3.display();cout«Hv4=H;v4.display();}定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出。classrational{private:longdenom^den;//denom为分子,den为分母public:iational(intnum=0.intdenom=l;mtoperator<(rationalr)const;mtoperator<=(iationali)const;iiitoperator-=(rationalr)const;mtoperator!=(rationalr)const;〃这里增加赋值和读出函数}(3) 设计一个复数类,并重载+,X,/和<<运算符。写完整程序并调试。(4) 用类模板方式设计一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年双方房产购置策划协议书
- 2025年停车场安全管理合同模板
- 2025年企业员工食堂经营合同
- 2025年上海餐饮股权转让合同范文
- 2025年度项目申请尽职调查服务协议样本
- 2025年冷链货物运输服务协议样本
- 2025年共营项目合作协议
- 2025年企业宣传册印刷合同样本
- 2025年智能锁销售合同协议
- 2025年安徽货运丛业资格证考试题及答案
- 慢性胰腺炎课件
- 北京理工大学应用光学课件第四章
- 阴道镜幻灯课件
- 2022年山东司法警官职业学院单招语文试题及答案解析
- PCB行业安全生产常见隐患及防范措施课件
- 2023版北京协和医院重症医学科诊疗常规
- DB32∕T 186-2015 建筑消防设施检测技术规程
- 2022年福建泉州中考英语真题【含答案】
- 汽车座椅骨架的焊接夹具毕业设计说明书(共23页)
- 露天矿山职业危害预先危险分析表
- 浅谈固定资产的审计
评论
0/150
提交评论