C++上机实验报告3

时间:2024.5.8

C++程序实验报告

实验目的

1.掌握类的定义和使用

2.掌握类的定义和对象的声明

3.复习具有不同访问属性的成员的访问方式

4.观察构造函数和析构函数的执行过程

5.学习类的组合使用方法

6.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序

实验要求

1.       定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,定义为enum CPU_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. 首先定义枚举类型CPU_Rank,例如enum CPU_Rank{P1=1, P2, P3, P4, P5, P6, P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:lab4_1.cpp。

源程序

#include<iostream>

using namespace std;

enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7};

class CPU

{

private:

CPU_Rank rank;

int frequency;

float voltage;

public:

CPU(CPU_Rank r, int f, float v);

~CPU();

CPU_Rank GetRank(){return rank;}

int GetFrequency(){return frequency;}

float GetVoltage(){return voltage;}

void SetRank(CPU_Rank r){rank=r;}

void SetFrequency(int f){frequency=f;}

    void SetVoltage(float v){voltage=v;}

    void Run(){cout<<"CPU开始运行!"<<endl;}

void Stop(){cout<<"CPU停止运行!"<<endl;}

};

CPU::CPU(CPU_Rank r, int f, float v)

{

           rank=r;

           frequency=f;

           voltage=v;

           cout<<"构造了一个CPU!"<<endl;

}

CPU::~CPU()

{

cout<<"析构了一个CPU!"<<endl;

}

void main()

{

CPU a(P4, 200, 3.8);

a.Run();

a.Stop();

}

运行结果:

 

2.使用debug调试功能观察程序lab4_1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。

3调试操作步骤如下:

1)单击Build | Start Debug | Step Into命令,或按下快捷键F11,系统进入单步执行状态,程序开始运行,一个DOS窗口出现,此时Visual Studio 中光标停在main()函数的入口处;

2)从Debug菜单或Debug工具栏中单击Step Over,此时,光标下移,程序准备执行CPU对象的初始化;

3)单击Step Into,程序准备执行CPU类的构造函数;

4)连续单击Step Over,观察构造函数;

5)此时程序准备执行CPU对象的run()函数,单击Step Into,程序进入run()成员函数,连续单击Step Over,直到回到main()函数。

6)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识。

7)再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。

运行结果:

4.首先定义CPU类(可使用第二题中的CPU类)、RAM类、CDROM类。再定义Computer类;定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提示信息。在主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。程序名:lab4_2.cpp.

源程序

#include<iostream>

using namespace std;

enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7};

class CPU

{

private:

         CPU_Rank rank;

         int frequency;//频率

         float voltage;//电压

public:

         CPU(CPU_Rank r, int f, float v);

         ~CPU();

         CPU(){};

         CPU_Rank GetRank(){return rank;}

         int GetFrequency(){return frequency;}

         float GetVoltage(){return voltage;}

         void SetRank(CPU_Rank r){rank=r;}

         void SetFrequency(int f){frequency=f;}

    void SetVoltage(float v){voltage=v;}

    void Run(){cout<<"CPU开始运行!"<<endl;}

         void Stop(){cout<<"CPU停止运行!"<<endl;}

};

CPU::CPU(CPU_Rank r, int f, float v)

         {

                   rank=r;

                   frequency=f;

                   voltage=v;

                   cout<<"构造了一个CPU!"<<endl;

         }

CPU::~CPU()

{

         cout<<"析构了一个CPU!"<<endl;

}

//

enum RAM_Rank {K1=1,K2,K3,K4,K5,K6,K7};

class RAM

{

private:

         RAM_Rank rank;

         int frequency;

         float voltage;

         int large;//大小

public:

         RAM(RAM_Rank r, int f, float v,int c);

         ~RAM();

         RAM(){}

         RAM_Rank GetRank(){return rank;}

         int GetFrequency(){return frequency;}

         float GetVoltage(){return voltage;}

         void SetRank(RAM_Rank r){rank=r;}

         void SetFrequency(int f){frequency=f;}

    void SetVoltage(float v){voltage=v;}

         void Setlarge(int c){large=c;}

    void Run(){cout<<"RAM开始运行!"<<endl;}

         void Stop(){cout<<"RAM停止运行!"<<endl;}

};

RAM::RAM(RAM_Rank r, int f, float v,int c)

         {

                   rank=r;

                   frequency=f;

                   voltage=v;

                   large=c;

                   cout<<"构造了一个RAM!"<<endl;

         }

RAM::~RAM()

{

         cout<<"析构了一个RAM!"<<endl;

}

//

enum CDROM_Rank {J1=1,J2,J3,J4,J5,J6,J7};

class CDROM

{

private:

         CDROM_Rank rank;

         int frequency;

         float voltage;

         int large;//大小

         float w;//转速

public:

         CDROM(CDROM_Rank r, int f, float v,int c,float m);

         ~CDROM();

         CDROM(){}

         CDROM_Rank GetRank(){return rank;}

         int GetFrequency(){return frequency;}

         float GetVoltage(){return voltage;}

         void SetRank(CDROM_Rank r){rank=r;}

         void SetFrequency(int f){frequency=f;}

    void SetVoltage(float v){voltage=v;}

         void Setlarge(int c){large=c;}

         void Setw(float m){w=m;}

    void Run(){cout<<"CDROM开始运行!"<<endl;}

         void Stop(){cout<<"CDROM停止运行!"<<endl;}

};

CDROM::CDROM(CDROM_Rank r, int f, float v,int c,float m)

         {

                   rank=r;

                   frequency=f;

                   large=c;

                   w=m;

                   voltage=v;

                   cout<<"构造了一个CDROM!"<<endl;

         }

CDROM::~CDROM()

{

         cout<<"析构了一个CDROM!"<<endl;

}

class COMPUTER

{

private:

         CPU cpu;

         RAM ram;

         CDROM cdrom;

public:

         void Run(){cout<<"computer RUN"<<endl;}

         void Stop(){cout<<"computer STOP"<<endl;}

         COMPUTER(){}

         COMPUTER(CPU&cpu1,RAM& ram1,CDROM& cdrom1)

         {

                   cpu=cpu1;

                   ram=ram1;

                   cdrom=cdrom1;

         }

         COMPUTER(COMPUTER&computer2)

         {

                   cpu=computer2.cpu;

                   ram=computer2.ram;

                   cdrom=computer2.cdrom;

         }

};

int main()

{

         CPU cpu(P1,100,2);

         RAM ram(K2, 100, 2, 12 );

         CDROM cdrom(J3,100,23,233,23);

         COMPUTER computer(cpu,ram,cdrom);

         computer.Run();

         computer.Stop();

        

         return 0;

}

        

运行结果:

5.使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。

运行结果:

思考题

1.       如何定义一个类

 数据,构造函数,析构函数,复制构造函数,方法。。。

2.       如何定义类的构造函数和析构函数?

构造函数通用于实例化象自内部数据员初始化设置初始值、配内存空间等

析构函数则用于删除象做收尾工作比释放申请空间等

3.       类的各成员函数的执行顺序是怎样的?

按调用顺序执行

4.       组合时对象的构造顺序是怎样的?

C++构造函数中初始化成员__参数列表初始化成员(必须用原因:对象成员的初始化,const修饰的成员的初始化,引用成员的初始化,子类调用父类的构造函数初始化父类成员)__参数列表在构造函数执行之前执行,参数列表中执行的是初始化(所有的成员,无论是否出现在参数列表中,都会有初始化),参数列表的执行顺序与类中成员的声明顺序,与类的继承顺序相一致__构造函数中执行的一般是赋值_多重继承,虚继承构造函数的参数初始化列表的区别  

6.心得体会:学到了什么;遇到的问题及解决方法等(可结合思考题)

    构造函数,成员函数,析构函数的调用顺序。


第二篇:上机实验报告(三)


“数据结构和算法II”课程实验报告

实验名称:栈和队列的综合应用

班级_14知识产权1班 _ 姓名 学号 _ 实验日期: 2015/4/22

实验机时:2 学时 实验成绩:

-------------------------------------------------------------------------------

一.实验目的:

熟悉栈的定义和栈的基本操作

熟悉队列的定义和栈的基本操作

掌握递归和非递归算法的实现技术和实际应用加深对栈结构的理解,培养解决实际问题的编程能力。

二.实验内容:

实现Hanoi 塔的问题;

完成迷宫问题或马踏棋盘问题求解。

三.程序及注释:

hanoi

#include<bits/stdc++.h>

#include<cstdio>

using namespace std;

const int N = 1024;

int Hanoi[N];

void move(int i, char a, char b)

{

static int c = 1;

printf("%d:%d 从%c --> %c \n", c++, i, a, b); }

void hanoi(int i, char a, char b, char c)

{

if(i == 1) move(i,a,c);

else

{

hanoi(i-1,a,c,b);

move(i,a,c);

hanoi(i-1,b,a,c);

}

}

int main()

{

int n;

while(1)

{

printf("请输入hanoi塔大小(输入0表示退出):"); scanf("%d", &n);

if(!n) break;

if(n > 0)

hanoi(n, 'A', 'B', 'C');

else

printf("你的输入有误,请重新输入,输入的值应要于0,you have to known about that \"没有塔是负数!\"\n"; }

return 0;

}

四.运行结果

/**

输入

3

6

-1

输出

请输入hanoi塔大小:3

1:1 从A --> C

2:2 从A --> B

3:1 从C --> B

4:3 从A --> C 5:1 从B --> A 6:2 从B --> C 7:1 从A --> C

请输入hanoi塔大小:6 1:1 从A --> B 2:2 从A --> C 3:1 从B --> C 4:3 从A --> B 5:1 从C --> A 6:2 从C --> B 7:1 从A --> B 8:4 从A --> C 9:1 从B --> C 10:2 从B --> A 11:1 从C --> A 12:3 从B --> C 13:1 从A --> B 14:2 从A --> C 15:1 从B --> C

16:5 从A --> B 17:1 从C --> A 18:2 从C --> B 19:1 从A --> B 20:3 从C --> A 21:1 从B --> C 22:2 从B --> A 23:1 从C --> A 24:4 从C --> B 25:1 从A --> B 26:2 从A --> C 27:1 从B --> C 28:3 从A --> B 29:1 从C --> A 30:2 从C --> B 31:1 从A --> B 32:6 从A --> C 33:1 从B --> C 34:2 从B --> A 35:1 从C --> A 36:3 从B --> C 37:1 从A --> B

38:2 从A --> C 39:1 从B --> C 40:4 从B --> A 41:1 从C --> A 42:2 从C --> B 43:1 从A --> B 44:3 从C --> A 45:1 从B --> C 46:2 从B --> A 47:1 从C --> A 48:5 从B --> C 49:1 从A --> B 50:2 从A --> C 51:1 从B --> C 52:3 从A --> B 53:1 从C --> A 54:2 从C --> B 55:1 从A --> B 56:4 从A --> C 57:1 从B --> C 58:2 从B --> A 59:1 从C --> A

60:3 从B --> C

61:1 从A --> B

62:2 从A --> C

63:1 从B --> C

请输入hanoi塔大小(输入0表示退出):-1

你的输入有误,请重新输入,输入的值应要大于0,you have toknown about that "没有塔是负数!"

输入hanoi塔大小(输入0表示退出):0

Process returned 0 (0x0) execution time : 14.829 s Press any key to continue.

Process returned 0 (0x0) execution time : 2.880 s Press any key to continue.

*/

迷宫

#include<bits/stdc++.h>

using namespace std;

const int N = 1024;

const int M = 1e7;

#define fi(i,n) for(int i = 0; i < n; i ++)

#define fin(i,n1,n2) for(int i = n1; i < n2; i ++) const int l[] = {0,0,1,-1};

const int r[] = {1,-1,0,0};

bool maze[N][N], stack[N] ;

bool p[N][N];

struct node

{

int f,x,y,o;

} d[N];

void print(int x)

{

if(d[x].f!=0) print(d[x].f);

printf("%d,%d,",d[x].x,d[x].y);

if(d[x].o == 0) printf("右\n");

else if(d[x].o == 1) printf("左\n"); else if(d[x].o == 2) printf("下\n"); else printf("上\n");

}

void solve(int n, int m)

{

fi(i,n) fi(j,m)

scanf("%d",maze[i]+j);

d[1].f = 0;

d[1].x = 0;

d[1].y = 0;

int t = 1, w = 1;

while(t<=w)

{

node a = d[t];

fi(i,4)

{

int ll = a.x+l[i], rr = a.y +r[i];

if(ll<0||ll>=n||rr<0||rr>=m||p[ll][rr]) continue;

p[ll][rr] = 1;

a.f = t;

a.x = ll;

a.y = rr;

a.o = i;

d[++w] = a;

if(d[w].x == n-1&& d[w].y == m - 1)

{

print(w);

return ;

}

}

++t;

}

}

int main()

{

int n, m;

printf("请输入迷宫的大小,长度n,宽度m(都为0则表示退出程序):");

while(~scanf("%d%d", &n, &m))

{

if(n > 0&& m > 0)

solve(n,m);

else

printf("别让我怀疑你的智商,哪有长度和宽度小于等于0的\n");

}

return 0; }

运行结果 /** 4 4

0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0

5 5

0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 0

*/

四.实验心得:本次实验难度比前几次高一些,但是经过了几次调试之后还是成功了,很有成就感。

更多相关推荐:
上机实验报告格式

网页设计实验报告院部热能学院专业热能与动力工程班级112姓名范金仓学号20xx031388一实验目的及要求1确定网站主题和网站的用途2收集资料和素材3规划网站结构和页面版式二实验环境本次实验基于Windows2...

计算机上机实验报告模板

交通与汽车工程学院实验报告课程名称课程代码学院直属系交通与汽车工程学院年级专业班学生姓名学号实验总成绩任课教师开课学院交通与汽车工程学院实验中心名称汽车交通实验中心西华大学实验报告西华大学实验报告理工类开课学院...

上机实验报告格式要求

VB上机实验报告要求1预习报告课程名称姓名实验名称班级学号实验日期指导教师一实验目的及要求本次上机实验所涉及并要求掌握的知识点二实验环境本次上机实践所使用的平台和相关软件三实验内容上机实践内容等四算法描述及实验...

C语言集中上机实验报告

重庆邮电大学移通学院C语言集中上机实验报告学生学号班级专业重庆邮电大学移通学院20xx年5月重庆邮电大学移通学院目录第一章循环311实验目的312实验要求313实验基本内容3131题目一3132题目二5第二章数...

上机实验报告

编译原理报告编译原理报告正规式转化为NFA班级19xx31班学号20xx1002284姓名李豪强指导老师刘远兴日期20xx10201编译原理报告前期准备摘要题目正规表达式NFA问题实习时间20xx1012问题描...

c++上机实验报告

实验1熟悉上机环境及C基础实验1实验目的和要求1熟悉上机环境了解VisualC60集成开发环境掌握源程序编辑程序调试查看变量程序运行2熟悉C的程序结构掌握main函数保留字变量及变量定义输入与输出流等概念3熟悉...

上机实验报告

辽宁工程技术大学上机实验报告

《统计学》上机实验报告(一)

统计学实验报告一姓名王璐专业财政学税收方向学号20xx128107日期20xx年10月9日地点实验中心701实验项目一描述性统计区间估计在EXCEL里的实现一实验目的1掌握利用EXCEL菜单进行数据的预处理2掌...

SPSS上机实验报告

四川理工学院SPSS上机实验报告课程名称SPSS统计分析高级教程专业班级20xx级统计2班姓名雷鹏程学号120xx050204指导教师林旭东实验日期20xx年12月15日实验名称多因素方差分析模型一实验案例分析...

java_web上机实验报告

实验一JSP内置对象的应用packagecomcountstoptimeimportjavautilpublicclassStopTimeprivateinth0privateintm0privateints0...

C程序设计上机实验报告6

C程序设计实验报告实验名称函数程序设计学时安排2学时实验类别上机操作型实验要求1人1组一实验目的1熟练掌握函数的定义和调用2熟练掌握使用函数编写程序3掌握函数的实参形参和返回值的概念及使用4掌握单步调试进入函数...

哈工大 数值分析上机实验报告

哈工大A16公寓1214室院士之家团队之作品Ps请各位师兄弟姐妹们抄的时候注意改动一下尽量不要太雷同实验报告一题目非线性方程求解摘要非线性方程的解析解通常很难给出因此线性方程的数值解法就尤为重要本实验采用两种常...

上机实验报告(29篇)