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

下载本文档

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

文档简介

精品文档 C+实验报告 专业:网络工程 班级:113班 学号:119074361 姓名:管庶龙 实验三 函数的应用一、 实验目的1、 掌握函数的定义和调用方法。2、 练习重载函数使用3、 练习函数模版的使用4、 练习使用系统函数二、 实验任务1、 编写一个函数把华氏温度转化为摄氏温度,转换公式为:C=(F-32)*5/9.2、 编写重载函数Max1可分别求取两个整数。三个整数,两个双精度数,三个双精度数的最大值。3、 使用重函数模版重新实现上小题中的函数Max1.4、 使用系统函数pow(x,y)计算想xy的值,注意包含头文件math.h。5、 用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。三、 实验步骤1、 编写函数float Convert(float TempFer),参数的返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。程序名为lab3_1.cpp。2、 分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。程序名:lab3_2.cpp。3、 使用函数模版实现求任意类型数的最大值,针对不同的参数个数,编写两个同名的函数模版max1,其参数个数不同,实现函数重载,在main()函数中测试函数的功能。程序名:lab3_3.cpp。4、 在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。程序名:lab3_4.cpp。5、 编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n2;fib(1)=fib(2)=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。四、 体会1、 初步掌握C+中函数调用。2、 与C语言中函数调用并没有多大区别。五、 程序代码Lab3_1.cpp #include using namespace std;double FtoC(double F) return (F-32)*5/9;int main() double F,c; coutF; c=FtoC(F); coutcendl;Lab3_2.cpp:#includeusing namespace std;int max(int a,int b) return(ab)? a:b);int max(int a,int b,int c) int d=max(a,b);return(cd)? c:d);double max(double a,double b) return(ab? a:b);double max(double a,double b,double c) double d=max(a,b);return(cd? c:d);int main() int a,b,c; double x,y,z; couta;cinb;cinc; coutx;ciny;cinz; coutmax(a,b)endl; coutmax(a,b,c)endl; coutmax(x,y)endl; coutmax(x,y,z)endl;Lab3_3.cpp #include #include using namespace std;int main()double x;int y;coutxy;coutx的y次方=pow(x,y)endl; Lab3_4.cpp#include#includeusing namespace std;templateT cmax(T a,T b) return (ab?a:b);templateA cmax(A a,A b,A c) A d=ab?a:b; return (cd?c:d);int main() int a,b,c; double x,y,z; couta;cinb;cinc; coutx;ciny;cinz; coutcmax(a,b)endl; coutcmax(a,b,c)endl; coutcmax(x,y)endl; coutcmax(x,y,z)endl; Lab3_5.cpp: #includeusing namespace std;int fib(int n);int main() int n,answer; coutn; coutnn; answer=fib(n); coutansweris thenth Fibonnaci numbern; return 0;int fib(int n) if(n3) return 1; else return fib(n-2)+fib(n-1); 实验四 类与对象一、 实验目的3、 掌握类的声明和使用。4、 掌握类的声明和对象的声明。5、 复习具有不同访问属性的成员的访问方式。6、 观察构造函数和析构函数的执行过程。7、 学习类的组合使用方法。8、 使用VC+的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。二、 实验任务1、 声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_RankP1=1,P2,P3,P4,P5,P6,P7,frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。2、 声明一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。3、 (选作)设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。三、 实验步骤1、 首先定义枚举类型CPU_Rank,例如 enum CPU_RankP1=1,P2,P3,P4,P5,P6,P7,再定义CPU类,包含等级(Rank),频率(frequency),电压(volatage),等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU类的对象,调用其成员 函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:lab4_1.cpp.2、 首先依次定义CPU类,RAM类,CDROM类,run、stop作为她们的成员函数,然后定义Computer类,cpu,ram,cdrom为Computer的内部成员。程序名:lab4_2.cpp.3、 首先安定义一个Date类,内含私有成员year,month,day。再定义一个Peolple类,内含私有成员num,sex,ID,Date birthday。再调用构造函数,析构函数,拷贝构造函数程序名:lab4_3.cpp。四、 体会1、 清楚的明白了类的定义和对象的声明。2、 了解了构造函数,析构函数,拷贝构造函数的执行过程。五、 程序代码Lab4_1.cpp#includeusing namespace std;class CPUpublic: CPU(int fre,float vol):frequency(fre),voltage(vol) cout成功调用构造函数endl; CPU() cout成功调用析构函数endl; void run(); void stop();private: enum CPU_Rank P1=1,P2,P3,P4,P5,P6,P7rank; int frequency; float voltage; void CPU:run() cout等级:P1endl; cout频率:frequencyendl; cout电压:voltageendl; void CPU:stop() cout程序结束!endl; int main() CPU cpu(120,380); cpu.run(); cpu.stop(); return 0; Lab4_2.cpp#includeusing namespace std;class CPUpublic: CPU(int fre,float vol):frequency(fre),voltage(vol) cout成功调用构造函数endl; CPU() cout成功调用析构函数endl; void run(); void stop();private: enum CPU_Rank P1=1,P2,P3,P4,P5,P6,P7rank; int frequency; float voltage; void CPU:run() cout程序开始执行endl; cout等级:P1endl; cout频率:frequencyendl; cout电压:voltageendl; void CPU:stop() cout程序结束!endl; class RAMpublic: RAM(int cap,float fre):capacity(cap),frequency(fre) cout成功调用构造函数endl; RAM() cout成功调用析构函数endl; void run(); void stop();private: enum RAM_Type DRR=1,DDR2,FPM,EDO,SDRAM,RDRAMtype; int capacity; float frequency; void RAM:run() cout类型:DRRendl; cout容量:capacityendl; cout工作频率:frequencyendl; void RAM:stop() class CDROMpublic: CDROM(int rat,int cac):rate(rat),cache(cac) cout成功调用构造函数endl; CDROM() cout成功调用析构函数endl; void run(); void stop();private: int rate; int cache; void CDROM:run() cout倍速:rateendl; cout缓存:cacheendl; void CDROM:stop() class Computerpublic: Computer(CPU &c,RAM &r,CDROM &cd):cpu(c),ram(r),cdrom(cd) cout构造了一台计算机!endl; Computer()cout析构了一个Computer!endl; void Run() cpu.run();ram.run();cdrom.run(); void Stop() cdrom.stop(); ram.stop(); cpu.stop(); cout计算机结束运行了!endl; private: CPU cpu; RAM ram; CDROM cdrom; ; int main() CPU cpu(60,220); RAM ram(2048,667); CDROM cdrom(18,2); Computer Computer(cpu,ram,cdrom); Computer.Run(); Computer.Stop(); return 0; Lab4_3.cpp#include #include using namespace std;class Date /日期类private:int year;int month;int day;public:Date() /默认构造Date(int y,int m,int d) /带参构造year=y;month=m;day=d;void set() /设置数据函数cinyearmonthday;void display()coutyear年month月day日;class Personprivate:int num;char sex;Date birthday;char ID18;public:Person() /默认构造Person(int n,int y,int m,int d,char id18,char s=m):birthday(y,m,d)num=n;sex=s;strcpy(ID,id); /有默认值的带参构造Person(Person& p) /拷贝构造num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);void input() /输入函数cout录入数据:endl;coutnum;coutsex;cout生日:;birthday.set();coutID;ID18=0;coutendl;void output() /输出函数cout编号:numendl;cout性别:sexendl;cout生日:;birthday.display();coutendl;cout身份证号:IDendl;Person() /析构函数cout num号人员已经录入endl;int main()Person p1;p1.input();p1.output();return 0;实验五 C+程序的结构一、 实验目的1、观察程序运行中的变量的作用域、生存期和可见性。2.学习类的静态成员的使用。3.学习多文件结构在C+程序中的使用。二、实验任务1.运行下面程序,观察变量x、y的值。/lab2_1.cpp3、 实现客户机(CLIENT)类。定义字符型静态数据成员ServerName,保存其服5.务器名称:整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中定义类,10在文件client.cpp中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。三、 实验步骤1、 运行程序lab5_1,观察程序输出。全局变量的作用域,在整个程序运行期间有效,但如果在局部模块中定义了同名的变量,则在局部模块中,可见的是局部变量,此时全局变量不可见;而局部变量的生存期只限于相应的程序模块中,离开相应的程序模块,局部变量x,y就不再存在,此时同名的全局变量重新可见。2、 新建一个空的项目lab5_2,添加头文件client.h,在其中定义类CLIENT,注意使用编译预处理命令;再添加源程序文件client.cpp,在其中实现CLIENT类,注意静态成员变量的使用方法,再添加文件lab5_2.cpp。在其中定义main()函数,测试CLIENT类,观察相应的成员变量取值的变化情况。四、 体会1、 初步了解静态成员的使用。2、 学习多文件在C+结构的应用。五、 程序代码Lab5_2.cpp#include #include using namespace std;class CLIENTprivate: static char ServerName; static int ClientNum;public: CLIENT(); CLIENT(); static int GetClientNum(); static void ChangServerName(char name); static char GetServerName();CLIENT:CLIENT()ClientNum+ ;CLIENT:CLIENT()ClientNum- ;int CLIENT:GetClientNum()return ClientNum;void CLIENT:ChangServerName(char name)ServerName=name;char CLIENT:GetServerName()return ServerName;#include int CLIENT:ClientNum = 0;char CLIENT:ServerName= A;int main()CLIENT a;CLIENT b;cout 服务器名称为: CLIENT:GetServerName() endl;CLIENT:ChangServerName(G);cout 客户机数量为: CLIENT:GetClientNum() endl;cout 服务器名称为: CLIENT:GetServerName() endl;实验六 数组、指针和字符串一、实验目的1、学习使用数组。2、学习字符串数据的组织和处理。3、掌握指针的使用方法。4、练习通过debug观察指针的内容及其所指的对象的内容。5、练习通过动态内存分配实现动态数组,并体会指针在其中的作用。二、实验任务1、编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。2、使用动态内存分配生成动态数组来重新设计一个3X3矩阵转置函数,使用指针实现函数的功能。3、编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。4、使用String类定义字符串对象,重新实现上一小题。5、(选作)定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name( )和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。(提示:对字符数组的赋值可以使用字符串拷贝函数strcpy(char *,char*,name)。6、(选作)定义包含个5元素的对象数组,每个元素都是Employee类型的对象。三、实验步骤1、编写矩阵转置函数,输入参数为3*3整型数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输出。程序名:lab6_1.cpp。2、改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中new操作符分配内存生成动态数组。程序名:lab6_2.cpp。3、编程实现两字符串的连接,定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。4、使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+ =”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。5、在employee.h文件中定义Employee类,Employee类具有姓名、街道地址、城市和邮遍等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数 strcpy(char *,char * name);display()中使用count显示姓名、街道地址、城市和邮遍等属性,chang_name()改变类中表示姓名属性的字符数组类型的数据成员。在主程序中定义这个类的对象并对其进行操作。程序名: lab6_5.cpp。6、使用上一小题中定义的Employee类定义对象数组enp5,使用循环语句把数据显示出来。程序名:lab6_6.cpp。四、体会1、初步了解数组,指针和字符串在C+中编译方式。2、与C语言有一定的不同之处,但也有相同的地方。3、更好的应用数组,指针和字符串问题的编译。五、程序代码Lab6_1.cpp#include using namespace std;void move (int juzhen33)int i, j, k;for(i=0; i3; i+)for (j=0; ji; j+)k = juzhenij;juzhenij = juzhenji;juzhenji = k;int main()int i, j;int data33;cout 输入矩阵的元素 endl;for(i=0; i3; i+)for (j=0; j3; j+)cout 第 i+1 行第 j+1 dataij;cout 输入的矩阵的为: endl;for(i=0; i3; i+)for (j=0; j3; j+)cout dataij ;cout endl;move(data);cout 转置后的矩阵的为: endl;for(i=0; i3; i+)for (j=0; j3; j+)cout dataij ;cout endl;Lab6_2.cpp#include using namespace std;void move (int *juzhen)int i, j, k;for(i=0; i3; i+)for (j=0; ji; j+)k = *(juzhen+i*3+j);*(juzhen+i*3+j) = *(juzhen+j*3+i); *(juzhen+j*3+i) = k;int main()int i, j;int *p=new int3*3;cout 输入矩阵的元素 endl;for(i=0; i3; i+)for (j=0; j3; j+)cout 第 i+1 行第 j+1 pi*3+j;cout 输入的矩阵的为: endl;for(i=0; i3; i+)for (j=0; j3; j+)cout pi*3+j ;cout endl;move(p);cout 转置后的矩阵的为: endl;for(i=0; i3; i+)for (j=0; j3; j+)cout pi*3+j ;cout endl;Lab6_3.cpp#include using namespace std;int main() int i=0,j=0; char s1100,s250; couts1; couts2; while(s1i) i+; while(s2j) s1i+=s2j+; s1i=0; cout连接后的字符串为:s1endl;Lab6_4.cpp#include #includeusing namespace std;int main() int i=0,j=0; string s1; string s2;couts1; couts2; s1+=s2; cout连接后的字符串为:s1endl;Lab6_5.cpp#include #includeusing namespace std;class Employee private: char name20; char address30; char city20; char zip6; public: Employee(char *n,char *add,char *ct,char *z); void change_name(char *n); void display();Employee:Employee(char *n,char *add,char *ct,char *z) strcpy(name,n); strcpy(address,add); strcpy(city,ct); strcpy(zip,z);void Employee:change_name(char *n) strcpy(name,n);void Employee:display() coutnameaddress; coutcityzip;int main() Employee Ep(李伟,雨山路3号,马鞍山,265483); Ep.display(); coutendl; Ep.change_name(郝思嘉); Ep.display(); coutendl;Lab6_6.cpp#includeusing namespace std;class Employeeprivate:char name10;char address30;char city20;char zip10;public:Employee(char name,char address,char city,char zip);void change_name(char name);void display();Employee:Employee(char n,char add,char ct,char z)strcpy(name,n);strcpy(address,add);strcpy(city,ct);strcpy(zip,z);void Employee:change_name(char n1)strcpy(name,n1);void Employee:display()coutname:nameendl;coutaddress:addressendl;coutcity:cityendl;coutzip:zipendl;int main()Employee enp5= Employee(李杰,华山路,阜阳,236000),Employee(曹昆,羽山路,全椒,255656), Employee(王震,湖东路,maanshan,268539), Employee(余成进,湖中路,安庆,265356),Employee(周幸,江东路,邻国,237200);for(int i=0;i5;i+)enpi.display();coutendl;return 0;实验七 继承和派生一、实验目的1、学习定义和使用类的继承关系,定义派生类。2、熟悉不同继承方式下对基类成员的访问控制。3、学习利用虚基类解决二义性问题。二、实验任务1、定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。2、定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。3、定义一个车(vehicle )基类,具有MaxSpeed、Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle )类、汽车(motorcar)类,自行车类具有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar类派生出摩托车(motorcycle )类,在继承过程中,注意把vehicle设置为虚基类。如果不把设置为虚基类,会有什么问题?编程试试看。三、实验步骤1、编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:error C2248:age:cannot access private member declared in class Animalerror C2248:age:cannot access private member declared in class Animal把age改为公有成员变量后重新编译就可以了。程序名为:lab7_1.cpp2、编写程序定义一个基类BassClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名为:lab7_2.cpp。3、 用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车类(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名为:lab7_3.cpp。 编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。四、体会1、了解派生类的定义方法。2、学会了定义和使用类的继承关系。3、学会了虚基类的使用并解决问题。五、程序代码Lab7_1.cpp#include using namespace std;class Animalpublic: int age;Animal();Animal();class dog:public Animalpublic:dog();dog();void SetAge(int n)age=9;int main()dog a;a.SetAge(10);return 0;Lab7_2.cpp#include using namespace std;class BaseClasspublic: BaseClass() cout 构造基类对象! endl;BaseClass() cout 析构基类对象! endl;class DerivedClass : public BaseClasspublic: DerivedClass() cout 构造派生类对象! endl;DerivedClass() cout 析构派生类对象! endl;int main() DerivedClass d;Lab7_3.cpp#include using namespace std;class vehicleprivate:int MaxSpeed;int Weight;public: vehicle()MaxSpeed=0; Weight=0;vehicle();void Run() cout Now it is running! endl; void Stop() cout Now it has stopped! endl; ;class bicycle : virtual public vehicleprivate:int Height;public:bicycle();bicycle();class motorcar : virtual public vehicleprivate:int SeatNum;public:motorcar();motorcar();class motorcycle : public bicycle , public motorcarpublic:motorcycle ();motorcycle ();int main()motorcycle a;a.Run();a.Stop();实验八 多态性一、实验目的1、掌握运算符重载的方法2、习使用虚函数实现动态多态性。二、实验任务1、定义Point类,有坐标x,y两个成员变量;对Point类重载“+”、“- -”运算符,实现对坐标值的改变。2、定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函的作用。3、(选做)前面实验中的People类重载“= =”运算符和“=”运算符,“= =”运算符判断两个People类对象的id属性

温馨提示

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

评论

0/150

提交评论