c++面向对象实验报告.docx
- 文档编号:6263425
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:14
- 大小:18.28KB
c++面向对象实验报告.docx
《c++面向对象实验报告.docx》由会员分享,可在线阅读,更多相关《c++面向对象实验报告.docx(14页珍藏版)》请在冰点文库上搜索。
c++面向对象实验报告
一、实验目的
1、掌握类的声明和使用。
2、掌握类的声明和对象的声明。
3、复习具有不同访问属性的成员的访问方式。
4、观察构造函数和析构函数的执行过程。
5、学习类的组合使用方法。
6、使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
二、实验任务
1、声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。
其中,rank为枚举类型CPU_Rank,声明为enumCPU_Rank{P1=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、#include
usingnamespacestd;
enumCPU_Rank{p1=1,p2,p3,p4,p5,p6,p7};
classCPU
{private:
CPU_Rankrank;
intfreauency;
floatvoltage;
public:
CPU(CPU_Rankr,intf,floatv)
{rank=r;
freauency=f;
voltage=v;
cout<<"ThisisCPUconstructprogram"< ~CPU() {cout<<"ThisisCPUdestroyfunction"< voidrun(){cout<<"TheCPUisrunning"< voidstop(){cout<<"TheCPUisStopping"< }; intmain() { enumCPU_Rankrank; rank=p5; CPUcpu1(rank,1024,; (); (); return0; } 运行结果: ThisisCPUconstructprogram TheCPUisrunning TheCPUisStopping ThisisCPUdestroyfunction 2、#include usingnamespacestd; enumCPU_Rank{p1=1,p2,p3,p4,p5,p6,p7}; classCPU {private: CPU_Rankrank; intfreauency; floatvoltage; public: CPU(CPU_Rankr=p1,intf=0,floatv=0) {rank=r; freauency=f; voltage=v; cout<<"ThisisCPUconstructprogram"< ~CPU() {cout<<"ThisisCPUdestroyfunction"< voidrun(){cout<<"TheCPUisrunning"< voidstop(){cout<<"TheCPUisStopping"< }; classRAM {private: intrank; intsize; public: RAM(intr=0,ints=0) {rank=r; size=s;} voidrun(){cout<<"TheRAMisrunning"< voidstop(){cout<<"TheRAMisStopping"< }; classCDROM {private: intrank; intsize; public: CDROM(intr=0,ints=0) {rank=r; size=s;} voidrun(){cout<<"TheCDROMisrunning"< voidstop(){cout<<"TheCDROMisStopping"< }; classComputer { private: CPUcpu; RAMram; CDROMcdrom; public: Computer(CPUc,RAMr,CDROMcd) {cout<<"ThisistheComputerConstruct"< cpu=c; ram=r; cdrom=cd;} voidrun() {cout<<"ThisisComputerisrunning"< (); ();} voidstop() {cout<<"ThisisComputerisstop"< (); ();} }; intmain() {enumCPU_Rankrank; rank=p5; CPUcpu1(rank,1024,; RAMram(5,1024); CDROMcdrom(5,1024); Computercp(cpu1,ram,cdrom); (); (); return0; } 实验二C++程序结构 1、实验目的 1.观察程序运行中的变量的作用域、生存期和可见性。 2.学习类的静态成员的使用。 3.学习多文件结构在C++程序中的使用。 2、实验任务 1.运行下面程序,2.观察变量x、y的值。 实现客户机(CLIENT)类。 定义字符型静态数据成员ServerName,4.保存其服5.务器名6.称: 整型静态数据成员ClientNum,7.记录已定义的客户数量;定义静态函数ChangeServerName()改变服8.务器名9.称。 在头文件中定义类,10.在文件中实现,11.在文件中测试这个类,12.观察相应的成员变量取值的变化情况。 实验二C++程序结构 1、实验目的 1.观察程序运行中的变量的作用域、生存期和可见性。 2.学习类的静态成员的使用。 3.学习多文件结构在C++程序中的使用。 2、实验任务 1.运行下面程序,2.观察变量x、y的值。 3.实现客户机(CLIENT)类。 定义字符型静态数据成员ServerName,4.保存其服务器名称: 整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。 在头文件中定义类,在文件中实现,在文件中测试这个类,观察相应的成员变量取值的变化情况。 三、实验结果 1. 2.服务器名称为: N 客户机数量为: 2 服务器名称为: A 实验源代码: 1.#include usingnamespacestd; voidfn1(); intx=1,y=2; voidmain() { cout<<"Begin..."< cout<<"x="< cout<<"y="< cout<<"Evaluatexandyinmain()..."< intx=10,y=20; cout<<"x="< cout<<"y="< cout<<"Stepintofn1()..."< fn1(); cout<<"Backinmain"< cout<<"x="< cout<<"y="< return0; } voidfn1() { inty=200; cout<<"x="< cout<<"y="< } 2.// #include #include usingnamespacestd; classCLIENT { private: staticcharServerName; staticintClientNum; public: CLIENT(); ~CLIENT(); staticintGetClientNum(); staticvoidChangServerName(charname); staticcharGetServerName(); }; // #include"" CLIENT: : CLIENT() { ClientNum++; } CLIENT: : ~CLIENT() { ClientNum--; } intCLIENT: : GetClientNum() { returnClientNum; } voidCLIENT: : ChangServerName(charname) { ServerName=name; } charCLIENT: : GetServerName() { returnServerName; } // #include<> #include"" intCLIENT: : ClientNum=0; charCLIENT: : ServerName='N'; intmain() { CLIENTa; CLIENTb; cout<<"服务器名称为: "< : GetServerName()< CLIENT: : ChangServerName('A'); cout<<"客户机数量为: "< : GetClientNum()< cout<<"服务器名称为: "< : GetServerName()< } 实验三数组与指针 一、实验目的 1、学习使用数组。 2、学习字符串数据的组织和处理。 3、掌握指针的使用方法。 4、练习通过debug观察指针的内容及其所指的对象的内容。 5、练习通过动态内存分配实现动态数组,并体会指针在其中的作用。 二、实验任务 1、测试3X3矩阵转置函数的程序,程序如下: #include usingnamespacestd; voidmove(intmatrix[3][3]) { inti,j,k; for(i=0;i<3;i++) for(j=0;j { k=matrix[i][j]; matrix[i][j]=matrix[j][i]; matrix[j][i]=k; } } intmain() { inti,j; intdata[3][3]; cout<<"输入矩阵的元素"< for(i=0;i<3;i++) for(j=0;j<3;j++) { cout<<"第"< <<"个元素为: "; cin>>data[i][j]; } cout<<"输入的矩阵的为: "< for(i=0;i<3;i++) { for(j=0;j<3;j++) cout< cout< } move(data); cout<<"转置后的矩阵的为: "< for(i=0;i<3;i++) { for(j=0;j<3;j++) cout< cout< } } 2、使用动态内存分配生成动态数组来重新设计一个3X3矩阵转置函数,使用指针实现函数的功能。 3、编程实现两字符串的连接。 要求使用字符数组保存字符串,不要使用系统函数。 4、使用String类定义字符串对象,重新实现上一小题。 (选作)5、定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。 display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。 实现并测试这个类。 (提示: 对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*,name))。 (选作)6、定义包含个5元素的对象数组,每个元素都是Employee类型的对象。 实验四继承与派生 一、实验目的 1、学习定义和使用类的继承关系,定义派生类。 2、熟悉不同继承方式下对基类成员的访问控制。 3、学习利用虚基类解决二义性问题。 二、实验任务 1、定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗? 编程试试看。 2、定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 3、定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,自行车类具有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。 从bicycle和motorcar类派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。 如果不把设置为虚基类,会有什么问题? 编程试试看。 实验结果: 1、errorC2248: 'age': cannotaccessprivatememberdeclaredinclass'Animal' 改正方案: 将Animal类中私有成员age换成公共成员。 2、构造基类对象! 构造派生类对象! 析构派生类对象! 析构基类对象! 3、Nowitisrunning! Nowithasstopped! //如果vehicle不是虚基类,有错误: errorC2385: 'motorcycle: : Run'isambiguous …… 源程序: 1、#include usingnamespacestd; classAnimal { private: intage; public: Animal(){}; ~Animal(){}; }; classDog: privateAnimal { public: Dog(){}; ~Dog(){}; voidSetAge(intn){age=n;} }; intmain() { Doga; (10); return0; } 2、#include usingnamespacestd; classBaseClass { public: BaseClass(){cout<<"构造基类对象! "< ~BaseClass(){cout<<"析构基类对象! "< }; classDerivedClass: publicBaseClass { public: DerivedClass(){cout<<"构造派生类对象! "< ~DerivedClass(){cout<<"析构派生类对象! "< }; intmain() { DerivedClassd; } 3、nclude usingnamespacestd; classvehicle { private: intMaxSpeed; intWeight; public: vehicle(){MaxSpeed=0;Weight=0;}; ~vehicle(){}; voidRun(){cout<<"Nowitisrunning! "< voidStop(){cout<<"Nowithasstopped! "< }; classbicycle: virtualpublicvehicle { private: intHeight; public: bicycle(){}; ~bicycle(){}; }; classmotorcar: virtualpublicvehicle { private: intSeatNum; public: motorcar(){}; ~motorcar(){}; }; classmotorcycle: publicbicycle,publicmotorcar { public: motorcycle(){}; ~motorcycle(){}; }; intmain() { motorcyclea; (); (); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 面向 对象 实验 报告