c++实验报告.docx
- 文档编号:16614047
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:62
- 大小:544.89KB
c++实验报告.docx
《c++实验报告.docx》由会员分享,可在线阅读,更多相关《c++实验报告.docx(62页珍藏版)》请在冰点文库上搜索。
c++实验报告
实验一类与对象
实验目的:
(1)掌握类的定义和使用;掌握类对象的声明;练习具有不同访问属性的成员的访问方式;观察构造函数和析构函数的执行过程;
(2)学习类组合使用方法;
(3)使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
仪器工具及材料
(1)PC+Windows2000+VC6.0
内容及程序
●代码:
(1)第一题:
#include
usingnamespacestd;
intMax1(inta,intb);//求两个整数最大值
intMax1(inta,intb,intc);//求三个整数最大值
doubleMax1(doublea,doubleb);//求两个双精度数最大值
doubleMax1(doublea,doubleb,doublec);//求三个双精度数最大值
//主函数
intmain()
{
inta,b,c;
doublex,y,z;
cout<<"求两个整数最大值,\n输入两个整数:
";
cin>>a>>b;
cout<<"最大值为:
"< cout<<"\n求三个整数最大值,\n输入三个整数: "; cin>>a>>b>>c; cout<<"最大值为: "< cout<<"\n求两个双精度数最大值,\n输入两个双精度数: "; cin>>x>>y; cout<<"最大值为: "< cout<<"\n求三个双精度数最大值,\n输入三个双精度数: "; cin>>x>>y>>z; cout<<"最大值为: "< return0; } intMax1(inta,intb) { returna>b? a: b; } intMax1(inta,intb,intc) { returna>b? (a>c? a: c): (b>c? b: c); } doubleMax1(doublea,doubleb) { returna>b? a: b; } doubleMax1(doublea,doubleb,doublec) { returna>b? (a>c? a: c): (b>c? b: c); } (2)第二题: #include usingnamespacestd; boolswap(int&a,int&b);//交换两个数值 //主函数 intmain() { inta,b; cout<<"请输入两个整数a,b: "; cin>>a>>b; cout<<"\n当前a,b值为: a="< swap(a,b); cout<<"运行swap()交换a,b值"< cout<<"当前a,b值为: a="< return0; } boolswap(int&a,int&b) { inttemp; temp=a; a=b; b=temp; returntrue; } (3)第三题: ///CPU.CPP //类成员函数定义 #include"CPU.H" intCPU: : run() { Rank=P4; frequency=150; voltage=4.55; cout<<"\ncpu正在运行。 \n级别,频率,电压已改变! "< cout<<"级别="< <<"\n电压="< return0; } intCPU: : stop() { Rank=P1; frequency=50; voltage=1.55; cout<<"\ncpu已停止。 \n级别,频率,电压已改变! "< cout<<"级别="< <<"\n电压="< return0; } CPU: : CPU(CPU&p) { Rank=p.Rank; frequency=p.frequency; voltage=p.voltage; cout<<"\nCPU复制构造函数正在运行"< cout<<"级别="< <<"\n电压="< } //CPU.H //cpu类 #pragmaonce #ifndef_CPU_H_ #define_CPU_H_ #include usingnamespacestd; enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7}; //类定义 classCPU { public: CPU(): Rank(P1),frequency(0),voltage(0.0) {cout<<"构造函数运行"< ~CPU(){cout<<"析构函数运行\n"< CPU(CPU&p);//复制构造函数 intrun();//运行函数 intstop();//停止函数 private: CPU_RankRank;//级别 intfrequency;//频率 doublevoltage;//电压 }; #endif ///main.cpp #include"CPU.H" //主函数 intmain() { cout<<"1.构造CPU对象cpu1: "< CPUcpu1; cpu1.run(); cpu1.stop(); cout<<"\n2.构造CPU对象cpu2: "< CPUcpu2(cpu1); return0; } (4)第四题: ///Computer.cpp //类成员函数 #include"Computer.h" Computer: : Computer(CPUCpu,RAMRam,CDROMCdrom): cpu(Cpu),ram(Ram),cdrom(Cdrom) { cout<<"Computer构造函数运行\n"< } Computer: : Computer(Computer&cmp) { cpu=cmp.cpu; ram=cmp.ram; cdrom=cmp.cdrom; cout<<"Computer复制构造函数正在运行\n"< } Computer: : ~Computer() { cout<<"Computer析构函数运行\n"< } intComputer: : run() { cout<<"Computer: : run函数运行\n"< return0; } intComputer: : stop() { cout<<"Computer: : stop函数运行\n"< return0; } intComputer: : print() { cout<<"5.Computer成员变量值为: \n"; cpu.Get(); cout<<"ram="< cout<<"cdrom="< cout<<"Computer: : print函数正在运行\n"< return0; } ///Computer.h //类定义 #pragmaonce #ifndef_COMPUTER_H_ #define_COMPUTER_H_ #include #include"CPU.H" usingnamespacestd; //RAM类定义 classRAM { public: RAM(intsize=0): ram_size(size){cout<<"RAM构造函数正在运行\n"< RAM(RAM&r){ram_size=r.ram_size;cout<<"RAM复制构造函数正在运行\n"< ~RAM(){cout<<"RAM析构函数正在运行\n"< intGet(){returnram_size;}//返回成员值 private: intram_size;//内存大小 }; //CDROM类定义 classCDROM { public: CDROM(boola=false): empty(a){cout<<"CDROM构造函数正在运行\n"< CDROM(CDROM&cd){empty=cd.empty;cout<<"CDROM复制构造函数正在运行\n"< ~CDROM(){cout<<"CDROM析构函数正在运行\n"< boolGet(){returnempty;}//返回成员值 private: boolempty;//是否为空标记 }; //类定义 classComputer { public: Computer(CPUCpu,RAMRam,CDROMCdrom);//构造函数 //Computer(): cpu(),ram(),cdrom(){cout<<"空构造函数正在运行\n"< Computer(Computer&cmp);//复制构函数 ~Computer();//析构函数 intrun(); intstop(); intprint(); private: CPUcpu;//芯片 RAMram;//内存 CDROMcdrom;//光驱 }; #endif ///CPU.CPP与CPU.H同第三题 ///main.cpp #include"Computer.h" //主函数 intmain() { cout<<"1.定义CPU对象: "< CPUcpu; cout<<"2.定义RAM对象: "< RAMram; cout<<"3.定义CDROM对象: "< CDROMcdrom; cout<<"4.定义Computer对象computer: "< Computercomputer(cpu,ram,cdrom); computer.print(); return0; } (5)第五题: ////见第三题 结果及分析 ●实验结果: 1 第一题: 2 第二题: 3 第三题: 4 第四题: 分析: 每定义一个变量将调用构造函数,形参为其他的类的构造函数中,函数调用时将先调用形参类的复制构造函数生成形参对象,在初始化列表中初始化类对象时也会调用复制构造函数,构造函数运行结束会调用形参类的析构函数。 5 第五题: 见第三题 实验二类与对象 1.目的要求: 1)观察程序运行中变量的作用域、生存期和可见性; 2)学习类的静态成员的使用; 3)学习多文件结构在C++程序中的使用。 2.实验内容: 1)实现客户机(CLIENT)类。 定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。 ·代码: //client.h //client头文件 #pragmaonce #ifndef_CLIENT_H_ #define_CLIENT_H_ //头文件 #include #include usingnamespacestd; //client类定义 classCLIENT { public: CLIENT();//构造函数 ~CLIENT();//析构函数 CLIENT(CLIENT&P);//复制构造函数 staticboolChangeServerName(stringNewName);//改变服务器名称 staticintShowClientNum(){returnClientNum;}//返回客户机数量 private: staticstringServerName;//服务器名 staticintClientNum;//客户机数量 }; #endif //client.cpp //类成员函数定义 #include"client.h" //静态成员初始化 stringCLIENT: : ServerName(""); intCLIENT: : ClientNum=0; //构造函数 CLIENT: : CLIENT() { ClientNum++; //添加代码 } //析构函数 CLIENT: : ~CLIENT() { ClientNum--; //添加代码 } //复制构造函数 CLIENT: : CLIENT(CLIENT&P) { //添加代码 } //改变服务器名称 boolCLIENT: : ChangeServerName(stringNewName) { ServerName=NewName; cout<<"当前ServerName="< returntrue; } //test.cpp #include"client.h" //主函数 intmain() { CLIENTclient1;//CLIENT对象 stringname;//服务器名 intcount;//客户机数量 cout<<"已定义CLIENT对象client1"< cout<<"请输入服务器名: "; cin>>name; //改变服务器名 CLIENT: : ChangeServerName(name); cout<<"当前客户机数量: "< : ShowClientNum()< //定义client2 CLIENTclient2;//CLIENT对象 cout<<"已定义CLIENT对象client2"< cout<<"\n请输入改变后服务器名: "; cin>>name; CLIENT: : ChangeServerName(name); cout<<"当前客户机数量: "< : ShowClientNum()< //增加客户机 cout<<"\n请输入要增加客户机数量: "; cin>>count; CLIENT*newCLient=newCLIENT[count]; cout<<"当前客户机数量: "< : ShowClientNum()< //删除客户机 delete[]newCLient; cout<<"\n已删除新分配客户机对象"< cout<<"当前客户机数量: "< : ShowClientNum()< return0; } ·运行结果: 2)利用多文件结构实现题目1),在头文件client.h中定义类,在文件client.cpp中实现该类,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况,要求ClientNum能够实时记录客户机对象的数量。 ·代码: 同第一题 ·运行结果: 3)思考并回答以下概念: 类的静态数据成员,类的静态函数成员,多文件结构,文件包含。 a)类的静态数据成员: static关键字开始的数据成员,为一个类所共有,公有状态下可通过对象名或类名访问,在类定义外初始化。 b)类的静态函数成员: static关键字开始的函数成员,也为一个类所共有,可通过对象或类名访问,该函数不能直接访问非静态成员,需通过对象名访问。 可直接访问静态成员与成员函数。 3.主要仪器设备及软件: Windows2000+VC6.0 实验三数组、指针与字符串实验 1.目的要求: 1)学习使用数组;学习字符串数据的组织和处理;学习标准C++库的使用; 2)掌握指针的使用方法;练习通过debug观察指针的内容及其所指的对象的内容;练习通过动态内存分配实现动态数组,并体会指针在其中的作用; 3)分别使用字符数组和标准C++库练习处理字符串的方法。 2.实验内容: 2)编写一个类用于处理3×3矩阵转置,测试转置的效果,输出转置前后的矩阵。 .代码: //Matrix.h //Matrix.h类声明 //实现任意类型矩阵的转置 #ifndefMATRIX_H #defineMATRIX_H //头文件 #include #include //声明模板类 template classReveMatrix { public: ReveMatrix(){} ~ReveMatrix(){} //转置n*m的矩阵 staticT*getReverse(T*a,intn,intm);//返回指针类型 }; //函数定义 template : getReverse(T*a,intn,intm) { Ttemp; inti,j; vector for(i=0;i { for(j=0;j { b[i*n+j]=a[j*m+i]; } } for(i=0;i { for(j=0;j { a[i*m+j]=b[i*m+j]; } } returna; } #endif //函数重载实现n*n矩阵转置 /* classReveMatrix { public: ReveMatrix(){} ~ReveMatrix(){} //转置n*m的矩阵 staticvoidgetReverse(double*a,intn,intm); staticvoidgetReverse(float*a,intn,intm); staticvoidgetReverse(int*a,intn,intm); staticvoidgetReverse(char*a,intn,intm); staticvoidgetReverse(string*a,intn,intm); }; voidReveMatrix: : getReverse(double*a,intn,intm) { doubletemp=0; for(inti=0;i { for(intj=i;j { temp=*(a+i*m+j); *(a+i*m+j)=*(a+j*n+i); *(a+j*n+i)=temp; } } } voidReveMatrix: : getReverse(float*a,intn,intm) { floattemp; for(inti=0;i { for(intj=0;j { temp=*(a+i*m+j); *(a+i*m+j)=*(a+j*n+i); *(a+j*n+i)=temp; } } } voidReveMatrix: : getReverse(int*a,intn,intm) { inttemp; for(inti=0;i { for(intj=0;j { temp=*(a+i*m+j); *(a+i*m+j)=*(a+j*n+i); *(a+j*n+i)=temp; } } } voidReveMatrix: : getReverse(char*a,intn,intm) { chartemp; for(inti=0;i { for(intj=0;j { temp=*(a+i*m+j); *(a+i*m+j)=*(a+j*n+i); *(a+j*n+i)=temp; } } } voidReveMatrix: : getReverse(string*a,intn,intm) { stringtemp; for(inti=0;i { for(intj=0;j { temp=*(a+i*m+j); *(a+i*m+j)=*(a+j*n+i); *(a+j*n+i)=temp; } } } */ //main.h #include #include"Matrix.h" usingnamespacestd; //定义矩阵长宽 #defineW3 #defineH3 intmain() { inti,j; inta[W][H]={1,2,3,4,5,6,7,8,9}; int*p; charch[W][H+1]={'a','b','c','d','e','f','g','h','i','j','k','l'}; char*pp; cout<<"转置前矩阵: "< for(i=0;i { for(j=0;j { cout< } cout< } p=ReveMatrix : getReverse((int*)a,W,H); cout<<"转置后矩阵: "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)