还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验类和对象
11.1实验目的和规定1理解类和对象的概念,掌握声明类和定义对象的方法2掌握构造函数和析构函数的实现方法3初步掌握使用类和对象编制C++程序4掌握对象数组、对象指针和string类的使用方法5掌握使用对象、对象指针和对象引用作为函数参数的方法6掌握类对象作为成员的使用方法7掌握静态数据成员和静态成员函数的使用方法8理解友元的概念和掌握友元的使用方法
1.2实验内容和环节
1.输入下列程序//t est4—l.cpp#inclu deios t rcamusi ngnamespac estd;class Coo rdi nate{p ublicCoordinatei ntx1,i nty1{x=x1;y=yi;}C oordinateCoordinatep;〜Coordi nate{co ut«MDe structori sca1lededn”;}void M yA rray::Input{}{coutV”请键盘输入Vvie ngthV个整数:;int i;int*p=alist;for i=0;i1e ngt h;i++,p++ci n»*p;int mai n{MyAr raya5;a.Input;a.Displa y“显示已输入的;ret urn0;}2声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能【提醒】在第1步的基础上可增长下面的参考框架c1as sSorlArray:publicMyAr ray{publi c:voidSort;SortAr ray i nt1eng:MyA rra yle ng{coutMSor tArray类对象已创建°”vVe ndl;virtual〜SoArray;}SortArrayS ortA rray{cout«J,SortArr ay类对象被撤消”《endl;voidS ortArray::Sor t//请自行编写Sort函数的代码,将输入的整数从小到大排序//并将主函数修改为int main{Sort Arraya5;s.InputQ;s.Di spl ay显示排序以前的”;s.Sort;s.Dis play显示排序以后的”;re urn0;声明一个类ReArray继承类M yArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能【提醒】在第1步的基础上可增长下面的参考框架ClassReArray:pub1icMyArr ay{Publ icVoid rever se;ReArray i ntI eng;Vi rtual-RcArr ay;请读者自行编写构造函数、析构函数和倒置函数ReArray,以及修改主函数3声明•一个类AverA rr ay继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能【提醒】在第1步的基础上增长下面的参考框架class AverArray:publi cMyAr ray{Public:Av erArrayi nt1e ng;-AverArray;Doubl eAver;};请读者自行编写构造函数、析构函数和求平均值函数Ave r求解整数的平均值,以及修改主函数2声明一个NewArray类,同时继承了类SortArray,RcArray和AverArray,使得类NewAiray的对象同时具有排序、倒置和求平均值的功能在继承的过程中声明MyArr ay为虚基类,体会虚基类在解决二义性问题中的作用实验多态性
33.1实验目的和规定1了解多态性的概念2掌握运算符重载的基本方法3掌握虚函数的定义和使用方法4掌握纯虚函数和抽象类的概念和用法
3.2实验内容与环节
1.分析并调试下列程序,写出程序的输出结果,并解释输出结果//lest5_l.cp p#inc1udeiost reamusingnamespace s td;cl as s B{public virtua1void fl doublex{cout«”B::f1doublc^«xcn d1;voidf2do ub1e x{co udouble,,«2*x«en d1;}voidf3d oublex{co utvV”B:f3doublen«3*x«endl;class Dpubl icB{public:vir tual voidf1doublcx{cou tD:fldouble,,x«endl;1voidI2doubl ex{cout«D:f2d oublev2*xcn d1;voidf3d oublex{cout,,D:f3doubl e,,«3*x«en d1;};i ntmain{Dd:B*pb;d;D大pd=d;pb-fll.23;pb-fl
1.23;pb-f
21.23;pb-f
31.23;pb-f
33.14;rctu rn0;
2.编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加规定将小时范围限制在大于等于0,分钟范围限制在0〜59,秒钟范围限制在0〜59秒【提醒】时间类Time{publie Time int h=0»int m=0,i nts=0;Timeoperator+Timc;void disptim es t ring;private:i nthourse;i ntminut es;intsecon ds;
3.给出下面的抽象基类co nlainer;class container pro t ected:doubleradiu s;pub1ic:contai ncrdouble radiusl;virtualdo ub1e surface_a rea=0;virt ualdoub1e vo1ume=0;};规定建立3个继承conta i nc r的派生类cub e、sphcr e与cylin dcr,让每一个派生类都包含虚函数surfa ce_area和volume,分别用来计算正方体、球体和圆柱体的表面积及体积规定写出主程序,应用C++的多态性,分别计算边长为
6.0的正方体、半径为
5.0的球体,以及半径为
5.0和高为
6.0的圆柱体的表面积和体积
4.编写一个程序用于进行集合的并、差和交运算例如输入整数集合{954367和{2469},计算出它们进行集合的并、差和交运算后的结果【提醒】i.可用以下表达式实现整数集合的基本运算sl+s2两个整数集合的并运算sl-s2两个整数集合的差运算sl*s2两个整数集合的交运算ii.参考以下Set类的框架,用于完毕集合基本运算所需的各项功能c1ass set{publie set:set;void set::inputi ntd;int set:lenglh;int set::get dint i;voidset::di sp;s etset::operat or+se tsi;s etset:oper ator-set si;set s et:oper ator*set s1;s cts et::opcrator=set s1;protected:intlen;int s[MAX];实验模板与异常解决
44.1实验目的和规定D对的理解模板的概念2掌握函数模板和类模板的声明和使用方法3学习简朴的异常解决方法
4.2实验内容和环节【.分析并调试下列程序,写出运营结果并分析因素//tes t6_1_
1.cpp#include iostrea musingnamespace std;templatety penameTTmaxTx,Ty{retur nxyx:y;}ini maxinta,i ntb{ret urnaba:b;doub1emaxdoublea,doubleb{r etum aba:b;inim ain{coutVv”max3,7is“vVmax3‘,7«end1;return0;//tes t6—I_
2.c pp#in chidei ostrc amusingnamespa ces td;intm axintajn tb{return aba:b;}doub1emaxd oub1ea,doub1e b{return abab;int main{cou tVv“max3,7is tt«maxt3,,,7,«en d1;ret urn0;
2.编写一个求任意类型数组中最大元素和最小元素的程序,规定将求最大元素和最小元素的函数设计成函数模板
3.编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和【提醒】设计一个类模板tem p1ateclass Typec1as sArray{具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int型和double型的两个模板类,分别对整型数组与双精度数组完毕所规定的操作
4.编写一个程序,求输入数的平方根设立异常解决,对输入负数的情况给出提醒实验的流类库与输入输出5C++
5.1实验目的和规定1掌握C++格式化的输入输出方法2掌握重载运算符和“:”的方法3掌握磁盘文献的输入输出方法
5.2实验内容和环节
1.下面给出的cpp程序用于打印九九乘法表,但程序中存在错误请上机调试,使得此程序运营后,可以输出如下所示的九九乘法表*123456789112243369510152025661218243036448121688162432404856649182736455463728177142128354249//tes t7_l_
1.cpp#i nc1udeio stream int get x{return x;}int gety{re turn y;}private:i ntx,y;};C oordinate:CoordinateC oordinatep{x=p.x;y=P.y;c out«”copy-in it ializ ationCon str uctoui sca11ed\n”;int main{Coo rdinat ep13,4;Coo rdina tep2pl;Coordina tep3=p2;co u«,,p3=r«p
3.getx«,,;,«p
3.ge ly\n;re turn0;}1写出程序的运营结果2将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增添下述语句:coutMC onstructori sc a11ed.\n;写出程序的运营结果,并解释输出结果3按下列规定进行调试在主函数体内,添加卜.列语句C oordinatep4;#inc1udei om anipusingnamespacestd;intmai n{i nt i,j;cout“*;fori=l;i=9;i++cout«iv;cout«end1;fori=l;i=9;i++{cout«i;forj=1;j=i;j++C outi*j;ret urn0;
2.下面的程序用于记录文献xyz.txt中的字符个数,请填空完毕程序//test7_2_
1.c pp#include iost ream#includefstre amusingnamespace std;int mainO{char ch;i nti=0;i fst rearnfile;fil e.open xyz.txt”,i os:in;if
①cout«w xyz.t xtcannot open,end1;abort;Whi1e!fi1e.eof0
②i++;cout V”文献字符个数:V i«cndl
③ret um0;}
3.重载运算符和“”,使其可以输入一件商品的信息和输出这件商品的信息商品的信息由编号、商品名和价格假如商品类Merchandise的框架如下cl assmerc handisepublic:M erchandi ss;〜Merc handiss;fr iendi stream operatoris t ream in,M erchandi sss;fri endost reamoperator«ostreani out,Merchandi sss;pri vat eintno;char*name;double price;;规定实现该类,并编写以下的main函数对该类进行操作int main{Merc handis emer;cin»mer;cout«me r;rct urn0;
4.编写一个程序,将两个文本文献连接成一个文献,然后将此文献中所有小写字母转换成大写字母,并打印出来C oordinaIa p52;调试程序时会出现什么错误为什么如何对已有的构造函数进行适当修改?4通过以上第2步和第3步的修改后,结合运营结果分析:创建不同的对象时会调用不同的构造函数
2.设计一个4*4魔方程序,让魔方的各行值的和等于各列值的和,并且等于两对角线值的和例如一下魔方:921191517131123313525727291各行、各列以及对角线值的和都是
64.【提醒】求4火4魔方的一般环节如下1设立初始魔方的起始值和相邻元素之间的差值例如上述魔方的初始魔方的起始值fi rst和相邻元素之间的差值step分别为first=1sle p=22设立初始魔方元素的值例如上述魔方的初始魔方为:1357911131517192123252729313生成最终魔方方法如下
①求最大元素值与最小元素值的和sum,该实例的sum是:1+31=32
②用32减去初始魔方所有对角线上元素的值,然后将结果放在本来的位置,这样就可求得最终魔方本例最终魔方如下:31352592119151713I123727291本题的魔方类mag ic的参考框架如下:clas smagi c{publi c:void gctdata;voidsetfirsimagic;void generatemagic;voi dprintmagic;priv ate intm
[4]
[4];int sie p;i ntfirst;int sum;
3.设计一个用来表达直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,规定A的坐标点在第3象限,B的坐标在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,规定按如下格式输出结果Axl,y!,Bx2,y2Distanccl=dlDi stance1=d2其中xl、x
2、yl、y2为指定的坐标值,d1和d2为两个坐标点之间的距离【提醒】类Lo cation的参考框架如下cl assLoc ation{public:Loc ationdoubl e,doubIe;doubleGet xdouhlcGctydoub1edistan ceLocat ion;fr ien ddoubledist anceLocati on,Location;pri vate:doublex,y;;
4.声明一个Student类,在该类中涉及一个数据成员score分数、两个静态数据成员total_scorc总分和count学生人数;还涉及一个成员函数account用于设立分数、累计学生成绩之和、累计学生人数,一个静态成员函数sum用于返回学生的成绩之和,另一个静态成员函数average用于求全班成绩的平均值在main函数中,输入某班同学的成绩,并调用上述函数求出全班学生的成绩之和和平均分
5.使用C++的string类,将5个字符串按逆转后的顺序显示出来例如,逆转前的5个字符串是Germ anyJ apan America Brita inFra nce按逆转后的顺序输;11字符串是Franc eBritain AmericaJapanGermany*实验派生类与继承
22.1实验目的和规定1掌握派生类的声明方法和派生类构造函数的定义方法2掌握不同继承方式下,基类成员在派生类中的访问属性3掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则4学习虚基类在解决二义性问题中的作用
2.2实验内容与环节•
1.输入下列程序//test4_
1.c pp#includeios treamusing namespacestd;clas sBase{Publ ic voidset xinti{x=i;}Int getx{ret urnx;}public:intx;};c1as sDerived:pub1i cBase{public:voi dsety inti{y=i;lint geyreturny;voids how{co ut«Base::x=vVxVe ndl;public:int y;intin ain{Der ivedbb;bb,set x16;bb.sety25;bb.sh ow;cou tvv Base::x=,,«bb.x e ndl;cout«De rived:y=,«bb.yendl;cout,,Base::x=bb.g etx«endl;co ut〈V”Derived:y=bb.gety endl;rctur n01写出程序的运营结果2按以下规定,对程序进行修改后再调试,指出调试中犯错的因素
①将基类Bas e中数据成员x的访问权限改为priv ate时,会出现哪些错误为什么?
②将基类Ba se中数据成员x的访问权限改为protec led时,会出现哪些错误?为什么?
③在源程序的基础上,将派生类Der ived的继承方式改为priv ate时,会出现哪些错误?为什么?
④在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?
2.编写一个学生和教师的数据输入和显示程序学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门规定将编号、姓名、性别、年龄的输入和显示设计成一个类Pers on,并作为学生类Stude nt和教师类Teach er的基类供参考的类结构如下ci ass Person{};c1ass St udentpublicPer son{•・・;clas sTeacher:p ub1icP erson{♦•■};
3.按规定阅读、编辑、编译、调试和运营以下程序1阅读、编辑、编译、调试和运营以下程序,并写出程序的运营结果//test4_3_
1.cp P#i ncludei ostream〉#inc1udes tringus ingnam espacest d;clas sMy Array{public:MyArra yintleng;-MyArray{};void Input;void Displays tring;protc cted int*al ist;int length;M yArray::MyArray int1e ng{ifle ng=0{cout,,error length,\ex it1;al ist=new int[1eng];length=1eng;ifalist==NULL{coutVv”as signfai1ure”;exit1;cout«”MyArr ay类对象己创建M«end1;MyArray::~MyArray{del ete[]alist;c outVv”M yArray类对象被撤消endl;void MyArray:Di splaystring strinti;int*p=a1ist;cout«st rvvlenglhvv”个整数:“;for i=0;i length;i++,p++coc outend1;。