C++面向对象的实验报告_第1页
C++面向对象的实验报告_第2页
C++面向对象的实验报告_第3页
C++面向对象的实验报告_第4页
C++面向对象的实验报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、C+实验报告专业:网络工程班级:113班学号:119074361姓名:管庶龙实验三函数的应用一、实验目的1、掌握函数的定义和调用方法。2、练习重载函数使用3、练习函数模版的使用4、练习使用系统函数二、实验任务1、编写一个函数把华氏温度转化为摄氏温度,转换公式为:C=(F-32)*5/92、编写重载函数Maxi可分别求取两个整数。三个整数,两个双精度数,三个双精度数的最大值。3、使用重函数模版重新实现上小题中的函数Maxi.4、使用系统函数pow(x,y)计算想xy的值,注意包含头文件mathh。5、用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。三、实验步骤1、编写函数flo

2、atConvert(floatTempFer),参数的返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。程序名为lab3_1.cpp。2、分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。程序名:lab3_2cpp。3、使用函数模版实现求任意类型数的最大值,针对不同的参数个数,编写两个同名的函数模版max1,其参数个数不同,实现函数重载,在main()函数中测试函数的功能。程序名:lab3_3cpp。4、在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果

3、,再显示出来。程序名:lab3_4cpp。5、编写递归函数intfib(intn),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n2;fib(1)=fib=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。四、体会1、初步掌握C+中函数调用。2、与C语言中函数调用并没有多大区别。五、程序代码Lab3_1cpp#includeusingnamespacestd;doubleFtoC(doubleF)return(F-32)*5/9;intmain()doubleF,c;co

4、utF;c=FtoC(F);coutcendl;Lab3_2.cpp:#includeusingnamespacestd;intmax(inta,intb)return(ab)?a:b);intmax(inta,intb,intc)intd=max(a,b);return(cd)?c:d);doublemax(doublea,doubleb)return(ab?a:b);doublemax(doublea,doubleb,doublec)doubled=max(a,b);return(cd?c:d);intmain()inta,b,c;doublex,y,z;couta;cinb;cinc;c

5、outx;ciny;cinz;coutmax(a,b)endl;coutmax(a,b,c)endl;coutmax(x,y)endl;coutmax(x,y,z)endl;Lab3_3.cpp#include#includeusingnamespacestd;intmain()doublex;inty;coutvv请输入两个数:;cinxy;coutvvx的y次方=vvpow(x,y)vvendl;Lab3_4.cpp#includeviostream#includevstringusingnamespacestd;templatevclassTTcmax(Ta,Tb)return(ab?a

6、:b);templatevclassAAcmax(Aa,Ab,Ac)Ad=ab?a:b;return(cd?c:d);intmain()inta,b,c;doublex,y,z;coutvvinputthreeint:;cina;cinb;cinc;coutvvinputthreedouble:;cinx;ciny;cinz;coutvvcmax(a,b)vvendl;coutvvcmax(a,b,c)vvendl;coutvvcmax(x,y)vvendl;coutvvcmax(x,y,z)vvendl;Lab3_5.cpp:#includeviostreamusingnamespacest

7、d;intfib(intn);intmain()intn,answer;coutvvEnternumber:;cinn;coutnn;answer=fib(n);coutansweristhenthFibonnacinumbern;return0;intfib(intn)if(nmonth,day。再定义一个Peolple类,内含私有成员num,sex,ID,Datebirthday。再调用构造函数,析构函数,拷贝构造函数程序名:lab4_3.cpp。四、体会1、清楚的明白了类的定义和对象的声明。2、了解了构造函数,析构函数,拷贝构造函数的执行过程。五、程序代码Lab4_1.cpp#inclu

8、deusingnamespacestd;classCPUpublic:CPU(intfre,floatvol):frequency(fre),voltage(vol)coutvv成功调用构造函数vvendl;CPU()coutvv成功调用析构函数vvendl;voidrun();voidstop();private:enumCPU_RankP1=1,P2,P3,P4,P5,P6,P7rank;intfrequency;floatvoltage;voidCPU:run()coutvv等级:vvPIvvendl;coutvv频率:vvfrequencyvvendl;coutvv电压:vvvolta

9、gevvendl;voidCPU:stop()coutvv程序结束!vvendl;intmain()CPUcpu(120,380);cpu.run();cpu.stop();return0;Lab4_2.cpp#includeviostreamusingnamespacestd;classCPUpublic:CPU(intfre,floatvol):frequency(fre),voltage(vol)cout#includevstringusingnamespacestd;classDate/日期类private:intyear;intmonth;intday;public:Date()/默

10、认构造Date(inty,intm,intd)/带参构造year=y;month=m;day=d;voidset()/设置数据函数cinyearmonthday;voiddisplay()coutvvyearvv年vvmonthvv月vvdayvv日;classPersonprivate:intnum;charsex;Datebirthday;charID18;public:Person()/默认构造Person(intn,inty,intm,intd,charid18,chars=m):birthday(y,m,d)num=n;sex=s;strcpy(ID,id);/有默认值的带参构造Pe

11、rson(Person&p)/拷贝构造num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);voidinput()/输入函数coutvv录入数据:vvendl;coutvv编号:;cinnum;coutvv性别(m/f):;cinsex;coutvv生日:;birthday.set();coutvv身份证号:;cinID;ID18=0;coutvoidflI();inix-1,y2;in:负ini;ecu!cautVW%=W耳gndhcuntS=W*W一;CjU1;,LvaluaicxjilcLyinnidi:;tnd?;coutW-.

12、y-=?-endsccutW0epintofnlO.,.*C,endl4fr.J()!coutTiackinmainF,;endltroi.cTwx、:D:LQutyr,.yirliirn0midfn()inty-:vmt:.;x.x=:.end:门11:WyO二.y.endi:3、实现客户机(CLIENT)类。定义字符型静态数据成员ServerName,保存其服5务器名称:整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中定义类,10在文件clientcpp中实现,在文件testcpp中测试这个

13、类,观察相应的成员变量取值的变化情况。三、实验步骤1、运行程序lab5_1观察程序输出。全局变量的作用域,在整个程序运行期间有效,但如果在局部模块中定义了同名的变量,则在局部模块中,可见的是局部变量,此时全局变量不可见;而局部变量的生存期只限于相应的程序模块中,离开相应的程序模块,局部变量xy就不再存在,此时同名的全局变量重新可见。2、新建一个空的项目lab5_2,添加头文件clienth,在其中定义类CLIENT,注意使用编译预处理命令;再添加源程序文件client.cpp,在其中实现CLIENT类,注意静态成员变量的使用方法,再添加文件lab5_2cpp。在其中定义main()函数,测试C

14、LIENT类,观察相应的成员变量取值的变化情况。四、体会1、初步了解静态成员的使用。2、学习多文件在C+结构的应用。五、程序代码Lab5_2cpp#include#includeusingnamespacestd;classCLIENTprivate:staticcharServerName;staticintClientNum;public:CLIENT();CLIENT();staticintGetClientNum();staticvoidChangServerName(charname);staticcharGetServerName();CLIENT:CLIENT()ClientNu

15、m+;CLIENT:CLIENT()ClientNum-;intCLIENT:GetClientNum()returnClientNum;voidCLIENT:ChangServerName(charname)ServerName=name;charCLIENT:GetServerName()returnServerName;#includeintCLIENT:ClientNum=0;charCLIENT:ServerName=A;intmain()CLIENTa;CLIENTb;cout服务器名称为:CLIENT:GetServerName()endl;CLIENT:ChangServerN

16、ame(G);cout客户机数量为:CLIENT:GetClientNum()endl;cout服务器名称为:CLIENT:GetServerName()endl;实验六数组、指针和字符串一、实验目的1、学习使用数组。2、学习字符串数据的组织和处理。3、掌握指针的使用方法。4、练习通过debug观察指针的内容及其所指的对象的内容。5、练习通过动态内存分配实现动态数组,并体会指针在其中的作用。二、实验任务1、编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。2、使用动态内存分配生成动态数组来重新设计一个3X3矩阵转置函数,使用指针实现函数的功能。3、编程实现两字符串的连接。要求使用字符数组保

17、存字符串,不要使用系统函数。4、使用String类定义字符串对象,重新实现上一小题。5、(选作)定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和41$卩也()等函数。display。显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。(提示:对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*,name)。6、(选作)定义包含个5元素的对象数组,每个元素都是Employee类型的对象。三、实验步骤1、编写矩阵转置函数,输入参数为3*3整型数组,使用循环语句实现矩阵元素的

18、行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输出。程序名:lab6_1.cpp。2、改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中new操作符分配内存生成动态数组。程序名:lab6_2cpp。3、编程实现两字符串的连接,定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。4、使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重

19、载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4cpp。5、在employeeh文件中定义Employee类,Employee类具有姓名、街道地址、城市和邮遍等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*name);display()中使用count显示姓名、街道地址、城市和邮遍等属性,chang_name()改变类中表示姓名属性的字符数组类型的数据成员。在主程序中定义这个类的对象并对其进行操作。程序名:lab6_5cpp。6、使用上一小题中定义的Emp

20、loyee类定义对象数组enp5,使用循环语句把数据显示出来。程序名:lab6_6cpp。四、体会1、初步了解数组,指针和字符串在C+中编译方式。2、与C语言有一定的不同之处,但也有相同的地方。3、更好的应用数组,指针和字符串问题的编译。五、程序代码Lab6_1.cpp#includeusingnamespacestd;voidmove(intjuzhen33)inti,j,k;for(i=0;i3;i+)for(j=0;ji;j+)k=juzhenij;juzhenij=juzhenji;juzhenji=k;intmain()inti,j;intdata33;cout输入矩阵的元素endl

21、;for(i=0;i3;i+)for(j=0;j3;j+)cout第i+1行第j+1dataij;cout输入的矩阵的为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutdataij;coutendl;move(data);cout转置后的矩阵的为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutdataij;coutendl;Lab6_2.cpp#includeusingnamespacestd;voidmove(int*juzhen)inti,j,k;for(i=0;i3;i+)for(j=0;ji;j+)k=*(juzhen+i*3+j

22、);*(juzhen+i*3+j)=*(juzhen+j*3+i);*(juzhen+j*3+i)=k;intmain()inti,j;int*p=newint3*3;cout输入矩阵的元素endl;for(i=0;i3;i+)for(j=0;j3;j+)cout第i+1行第j+1pi*3+j;cout输入的矩阵的为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutpi*3+j;coutendl;move(p);cout转置后的矩阵的为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutpi*3+j;coutendl;Lab6_3.cpp#in

23、cludeusingnamespacestd;intmain()inti=0,j=0;chars1100,s250;coutvv请输入第一个字符串:;cins1;coutvv请输入第二个字符串:;cins2;while(s1i)i+;while(s2j)s1i+=s2j+;s1i=0;coutvv连接后的字符串为:vvslvvendl;Lab6_4.cpp#includeviostream#includevstring.husingnamespacestd;intmain()inti=0,j=0;strings1;strings2;coutvv请输入第一个字符串s1:;cins1;coutvv

24、请输入第二个字符串s2:;cins2;s1+=s2;coutvv连接后的字符串为:vvslvvendl;Lab6_5.cpp#includeviostream#includevstring.husingnamespacestd;classEmployeeprivate:charname20;charaddress30;charcity20;charzip6;public:Employee(char*n,char*add,char*ct,char*z);voidchange_name(char*n);voiddisplay();Employee:Employee(char*n,char*add,

25、char*ct,char*z)strcpy(name,n);strcpy(address,add);strcpy(city,ct);strcpy(zip,z);voidEmployee:change_name(char*n)strcpy(name,n);voidEmployee:display()coutnameaddress;coutcityzip;intmain()EmployeeEp(李伟,”雨山路3号”,马鞍山”,265483);Ep.display();coutendl;Epchange_name(郝思嘉);Ep.display();coutendl;Lab6_6cpp#includ

26、eusingnamespacestd;classEmployeeprivate:charname10;charaddress30;charcity20;charzip10;public:Employee(charname,charaddress,charcity,charzip);voidchange_name(charname);voiddisplay();Employee:Employee(charn,charadd,charct,charz)strcpy(name,n);strcpy(address,add);strcpy(city,ct);strcpy(zip,z);voidEmplo

27、yee:change_name(charn1)strcpy(name,n1);voidEmployee:display()coutnamecoutaddresscoutcity:nameendl;:addressendl;:cityendl;coutzip:zipendl;intmain()Employeeenp5=Employee(李杰,”华山路,阜阳,236000),Employee(曹昆,”羽山路,”全椒”,255656),Employee(王震,湖东路”,maanshan,268539),Employee(余成进,”湖中路,”安庆,”265356),Employee(”周幸,”江东路,

28、”邻国”,237200);for(inti=0;i5;i+)enpi.display();coutendl;return0;实验七继承和派生一、实验目的1、学习定义和使用类的继承关系,定义派生类。2、熟悉不同继承方式下对基类成员的访问控制。3、学习利用虚基类解决二义性问题。二、实验任务1、定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。2、定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass观察构造函数

29、和析构函数的执行情况。3、定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,自行车类具有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar类派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把设置为虚基类,会有什么问题?编程试试看。三、实验步骤1、编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时

30、,会出现类似以下的错误提示:errorC2248:age:cannotaccessprivatememberdeclaredinclassAnimalerrorC2248:age:cannotaccessprivatememberdeclaredinclassAnimal把age改为公有成员变量后重新编译就可以了。程序名为:lab7_1cpp2、编写程序定义一个基类BassClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名为:lab7_2.cppo3、用debug功能跟踪程序lab7_2的执行过程,观察基类和

31、派生类的构造函数和析构函数的执行情况。写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车类(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名为:lab7_3cpp。编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。四、体会1、了解派生类的定义方法。2、学会了定义和使用类的继承关系。3、学会了虚基类的使用并解决问题。五、程序代码Lab

32、7_1cpp#includeusingnamespacestd;classAnimalpublic:intage;Animal();Animal();classdog:publicAnimalpublic:dog();dog();voidSetAge(intn)age=9;intmain()doga;a.SetAge(10);return0;Lab7_2.cpp#includeusingnamespacestd;classBaseClasspublic:BaseClass()cout构造基类对象!endl;BaseClass()cout析构基类对象!endl;classDerivedClass

33、:publicBaseClasspublic:DerivedClass()cout构造派生类对象!endl;DerivedClass()cout析构派生类对象!endl;intmain()DerivedClassd;Lab7_3.cpp#includeusingnamespacestd;classvehicleprivate:intMaxSpeed;intWeight;public:vehicle()MaxSpeed=0;Weight=0;vehicle();voidRun()coutNowitisrunning!endl;voidStop()coutNowithasstopped!endl;

34、classbicycle:virtualpublicvehicleprivate:intHeight;public:bicycle();bicycle();classmotorcar:virtualpublicvehicleprivate:intSeatNum;public:motorcar();motorcar();classmotorcycle:publicbicycle,publicmotorcarpublic:motorcycle();motorcycle();intmain()motorcyclea;a.Run();a.Stop();实验八多态性、实验目的1、掌握运算符重载的方法2、

35、习使用虚函数实现动态多态性。二、实验任务1、定义Point类,有坐标x,y两个成员变量;对卩0诚类重载“+”、“-”运算符,实现对坐标值的改变。2、定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函的作用。3、(选做)前面实验中的People类重载“=”运算符和“=”运算符,“=”运算符判断两个People类对象的id属性是否相等;“=”运算符实现People类对象的赋值操作。三、实验步骤1、编写程

36、序定义Point类,在类中定义整型的私有成员变量x,y,定义成员函数Point&operator+();Pointoperator+(int);以实现对Point类重载“+”运算符,定义成函数Point&operator-);Pointoperator-(int);以实现对Point类重载“-”运算符,实现对坐标值的改变。程序名:lab8_1cpp。2、编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车类(motorcar),从bicycle类和motorcar类派生出摩托车类(motorcycle),它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用几个对象的成员函数,看看能否成功;把、Stop定义为虚函数,再试

温馨提示

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

评论

0/150

提交评论