第一篇:C++俄罗斯方块实验报告(附实验体会)
程序设计综合实验
设计文档
惠州学院
HUIZHOU UNIVERSITY
课程名称: 程序设计综合实验
姓名:实验名称: 俄罗斯方块 学号:任课教师:
专业:班级: 计算机科学与技术1班
实验时间:
计算机科学与技术
综合实验项目:俄罗斯方块游戏
1、问题需求
(1)游戏等级:游戏分为1-10十个等级,等级越高,方块下落速度越快;(2)由方向键控制游戏:上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;
(3)游戏积分:一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。
2、总体设计:
(1)用数组存放方块(2)输出地图
(3)在地图里面输出方块(4)开始游戏(5)方块的旋转(6)方块是否能下落(7)判断方块是否能下落(8)提示下一个即将下落的方块(9)控制方块的下落速度
(10)分成10等级,等级越高方块下落得更快(11)消行处理(12)游戏结束
3、详细设计设计说明:本程序运行代码如下:
#include
#define SQUARE_COLOR FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY //方块的颜色 #define up
#define down
#define left
#define right
#define esc #define MAPW
//地图的宽度
#define MAPH
//地图的高度
BOOL isavailable(int a[],int x,int y,int w,int h);//判定是否能放下 void turn(int a[][4],int w,int h,int *x,int y);
//转动 int * create();
//创建方块 void init();
//初始化工作
void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors);void clearcache();
//清除键盘缓冲区 void end();void clearsquare(int *a,int w,int h,int x,int y);void gameover();void deletemap(int m[][MAPW],int row,int w,int h);//消除一行
int dx=30,dy=5;
//屏幕上的偏移量 int score=0,level=0;
int map[MAPH][MAPW];int a1[4][4]={{1},{1,1,1}};int a2[4][4]={{0,1},{1,1,1}};int a3[4][4]={{1,1},{0,1,1}};int a4[4][4]={{0,0,1},{1,1,1}};int a5[4][4]={{0,1,1},{1,1}};int a6[4][4]={{1,1,1,1}};int a7[4][4]={{1,1},{1,1}};int a[4][4];
int main(){
init();int *b=NULL;b=create();
//预创建方块 int q=0;int sign,blank,x,y;while(1){
for(int i=0;i<4;i++)
//复制方块
for(int j=0;j<4;j++)
if(a[i][j]=*(b+i*4+j))blank=i;
y=1-blank;x=4;clearsquare(&a[0][0],4,4,13,13);b=create();HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| drawblocks(b,4,4,13,13,wColors,1);wColors[0]=SQUARE_COLOR;drawblocks(&a[0][0],4,4,x,y,wColors,1);clearcache();char string[5];wColors[0]=FOREGROUND_RED| textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10));textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10));sign=1;while(sign){
int delay=0,max_delay=100-10*level;//延迟量 while(delay if(_kbhit())//用if避免按住键使方块卡住 { switch(key){ case up: clearsquare(&a[0][0],4,4,x,y);turn(a,4,4,&x,y);draw=1;break; int draw=0;int key=_getch();FOREGROUND_GREEN|FOREGROUND_INTENSITY };FOREGROUND_GREEN|FOREGROUND_INTENSITY; case down: } } } delay=max_delay;break; if(isavailable(&a[0][0],x-1,y,4,4)){ } clearsquare(&a[0][0],4,4,x,y);x--;draw=1; case left: break; if(isavailable(&a[0][0],x+1,y,4,4)){ } break;end();break; clearsquare(&a[0][0],4,4,x,y);x++;draw=1; case right: case esc: if(draw){ } HANDLE handle;handle=initiate(); WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);draw=0; _sleep(8);delay++;if(isavailable(&a[0][0],x,y+1,4,4))//判断是否能下移 { clearsquare(&a[0][0],4,4,x,y);y++; HANDLE handle; } } } } else { } handle=initiate(); WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1); sign=0; //标记,使跳出 while(sign)循环,产生新方块 if(y<=1)gameover(); //是否结束 for(int i=0;i<4;i++) //放下方块 for(int j=0;j<4;j++) if(a[i][j]&&((i+y) map[i+y][j+x]=a[i][j]; int full,k=0; for(i=y;i } full=1; for(int j=1;j<11;j++){ } deletemap(map,i,MAPW,MAPH);k++; q++; score=score+k;level=min(q/30,9);if(!map[i][j])full=0; if(full) //消掉一行 return EXIT_SUCCESS;BOOL isavailable(int a[],int x,int y,int w,int h){ for(int i=max(y,1);i } return 0;return 1;int * create(){ } void init(){ for(int i=0;i<20;i++){ } for(i=0;i<12;i++){ } map[0][i]=-1;map[19][i]=-1;map[i][0]=-2;map[i][11]=-2; //初始化工作 int * a=NULL;int c=rand()%7;switch(c){ case 0: } return a;a=&a1[0][0];break;a=&a2[0][0];break;a=&a3[0][0];break;a=&a4[0][0];break;a=&a5[0][0];break;a=&a6[0][0];break;a=&a7[0][0];break;case 1: case 2: case 3: case 4: case 5: case 6: } map[0][0]=-3;map[0][11]=-3;map[19][0]=-3;map[19][11]=-3;HANDLE handle;handle=initiate();WORD wColors[1]={ FOREGROUND_GREEN|FOREGROUND_INTENSITY};textout(handle,26+dx,3+dy,wColors,1,“分数”);textout(handle,26+dx,7+dy,wColors,1,“等级”);textout(handle,26+dx,11+dy,wColors,1,“下一个方块提示”);wColors[1]=FOREGROUND_RED|FOREGROUND_INTENSITY;drawblocks(&map[0][0],12,20,0,0,wColors,1);textout(handle,dx,dy,wColors,1,“◇══════════◇”);wColors[0]= FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-16,dy,wColors,1,“按任意键开始”);wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+3,wColors,1,“制作者”);wColors[0]=FOREGROUND_BLUE| FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+5,wColors,1,“赵强”);int x=_getch();srand(x);textout(handle,dx-16,dy,wColors,1,“ ”);void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors){ HANDLE handle;handle = initiate();int temp; for(int i=0;i for(int j=0;j if((temp=a[i*w+j])&&y+i>0){ if(temp==-3) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“◆”); } } else if(temp==-2) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“║”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“═”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“■”); else if(temp==-1)else if(temp==1)void clearcache(){ } void end(){ } void turn(int a[][4],int w,int h,int *x,int y){ int b[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};int sign=0,line=0;for(int i=h-1;i>=0;i--){ } for(int j=0;j { } line++;sign=0;if(a[i][j]){ } b[j][line]=a[i][j];sign=1;exit(EXIT_SUCCESS);while(_kbhit()){ } _getch();if(sign) for(i=0;i<4;i++) if(isavailable(&b[0][0],*x-i,y,w,h)) { *x-=i; for(int k=0;k for(int j=0;j a[k][j]=b[k][j]; break;} } void clearsquare(int *a,int w,int h,int x,int y){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};for(int i=0;i for(int j=0;j if(a[i*w+j]&&i+y>0) textout(handle,2*(x+j)+dx,y+i+dy,wColors,1,“ } void gameover(){ HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| FOREGROUND_GREEN};textout(handle,7+dx,10+dy,wColors,1,”游戏结束“);clearcache();_getch();exit(EXIT_SUCCESS);} void deletemap(int m[][MAPW],int row,int w,int h){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};textout(handle,2+dx,row+dy,wColors,1,”﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌“); ”); } _sleep(100);for(int i=row;i>1;i--){ } for(i=1;i } BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString){ DWORD cWritten; BOOL fSuccess; COORD coord; coord.X = x; // start at first cell coord.Y = y; // of first row fSuccess = WriteConsoleOutputCharacter(hOutput,// screen buffer handle lpszString,// pointer to source string lstrlen(lpszString), // length of string coord,// first cell to write to &cWritten); // actual number written if(!fSuccess) cout<<“error:WriteConsoleOutputCharacter”< for(;fSuccess && coord.X < lstrlen(lpszString)+x;coord.X += nColors)HANDLE hOutput; hOutput = GetStdHandle(STD_OUTPUT_HANDLE);return hOutput; { fSuccess = WriteConsoleOutputAttribute(hOutput,// 屏幕缓存处理 wColors,// pointer to source string nColors,// length of string coord,// first cell to write to &cWritten); // actual number written } if(!fSuccess) return 0;} 4、程序运行结果截图: cout<<“error:WriteConsoleOutputAttribute”< 方块左移 方块右移 下一个方块开始下落 方块变形 消一行,增加1分 成功消多行 消多行后分数增加更多 消完30行后,提升一个等级 方块叠到顶端后游戏结束 5、程序使用说明: (1)按任意键开始游戏 (2)控制方块下落位置进行消行处理 (3)成功消行后加分,当消30行之后等级升一级,最高达到10等级 (4)当产生的新方块不能再下落时,游戏结束。(5)过程中可以按ESC直接退出游戏 6、本实验的心得体会 上个学期学习C++的时候,主要是局限于读课本,记住课本上的一些知识和概念,但很少自己亲自动手去编写代码,总是眼高手低,当真正的去编写这个俄罗斯游戏的时候就体会到编写代码真的好难,尤其是刚开始的想的时候,根本不知道如何下手。后来通过上网查询和请教一些编程比较好的同学后才有了一个基本的思路,自己又重新翻阅了一下课本,将课本上的知识又重新细致的复习了一遍,最终借助于网络和同学的帮助完成了这个实验。通过这个实验发现自己在编程方面还有很大的欠缺,编程能力很差劲,不过通过这个实验,也让我对上学期学习的C++知识有了一个很好很全面的复习,这是这个实验带给我最大的收获。必须要亲自动手多写,多看代码才能真正的学好C++。 姓名:XX 学院:XXX 班级:XXX 学号:XXX i++; } while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的输入”< 实验 三、函数的应用(2学时) 1、实验目的: 掌握函数的定义和调用方法。练习重载函数使用。练习函数模板的使用 练习使用系统函数。 在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。程序名:lab3_4.cpp。 编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。 7)调试操作步骤如下: 选择菜单命令Build|Start Debug |Step In,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。 把光标移到语句answer=fib(n)前,从Debug菜单单击Run To Cursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。 从Debug菜单中单击Step Into,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击Run to Cursor,再单击Step Into,程序递归调用fib函数,又进入fib函数,观察n的值。 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。 再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。 4、实验原理 C++中函数的重载使得同样的函数名下,只要参数类型、数目不同时,即可根据输入的数据进行相应的函数调用,使用起来简单方便。 5、思考与体会 C++中,函数的运用与之前学过的C语言既有相同之处,也有着不同的地方。相同的地方在于格式、用法等框架上的不变。但是C语言中对于同样的函数名是只能够申明一种函数的,倘若有相同的函数名出现系统即会报错,所以用起来有时是极为不便 0 //参数为两个双精度浮点形的函数 int max1(double a,double b){ a=a>b?a:b;return a;} //参数为三个双精度浮点形的函数 int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout< Lab3_3: #include int main(){ int i,j,k;cout<<“请输入要比较的3个数: ”< 2131415 public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){ //构造函数 cout<<“构造了一个CPU”< rank=r; frequency=f; voltage=v;} void run(){ cout<<“CPU开始运行”< } void stop(){ cout<<“CPU停止运行”< cout<<“RANK=”< cout<<“frequency=”< cout<<“voltage=”< }; int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;} Lab4_2 #include //析构函数-17 computer(Rank r,int f,float v){ CPU cpu(r,f,v); //定义CPU对象 RAM ram(1); //定义RAM对象 CDROM cdrom(1); //定义CDROM对象 cpu.run(); cpu.show(); cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;} 实验 七、继承与派生(一、二)4学时 1、实验目的: 学习定义和使用类的继承关系,定义派生类。熟悉不同继承方式下对基类成员的访问控制。学习利用虚基类解决二义性问题 2、实验任务 a)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。b)定义一个基类BaseClass,有整型成员变量Number ,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。c)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。 3、实验步骤 编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示: error C2248:’age’:cannot access private member declared in class ‘Animal’ error C2248:’age’:cannot access private member declared in class ‘Animal’ 把age改为公有成员变量后重新编译就可以了。程序名为:lab7_1.cpp 0 确方便我们编程。 6、部分参考代码 Lab7_1 #include class Animal{ public: int age;}; class dog:public Animal{ public: int SetAge(int n){ age=n; return age;} }; void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”< Lab7_2 #include cout<<“这是父类的构造函数”< cout<<“这是父类的析构函数”< //Motorcycle继承bicycle和motorcar类 class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){ SeatNum=seat; height=H; MaxSpeed=MS; Weight=W;} void show(){ cout<<“seatnum=”< cout<<“height=”< cout<<“MaxSpeed=”< cout<<“weight=”< int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 实验 八、多态性2学时 1、实验目的: 掌握运算符重载的方法 习使用虚函数实现动态多态性。 2、实验任务 a)定义Point类,有坐标x,y两个成员变量;对Point类重载“++”、“--”运算符,实现对坐标值的改变。 定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函的作用。 3、实验步骤 编写程序定义Point类,在类中定义整型的私有成员变量x,y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”运算符,定义成函数Point& operator –();Point operator 也就是函数的重载。 6、部分参考代码 Lab8_1 #include class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;}; Point Point::operator++(int){ return Point(xray++,yray++);} Point Point::operator--(int){ return Point(xray--,yray--);} void Point::show(){ cout<<“x坐标为”< int main(){ Point p(4.5,6.5);cout<<“进行运算前的情况:”< show(&v);return 0;} 信息工程系课程实验报告 姓 名 学 号 实验学时 2 实验时间 2017 年 12 月 1 日 实验地点 指导教师 课程名称 C++程序设计 专 业班 级 成绩 实验项目 类和对象(构造函数、析构函数、组合类、友元) 实 验 目 的 1、理解类的概念;2、掌握声明类的方法; 3、掌握对象的定义和初始化 4、掌握通过类编写程序 5、构造函数、析构函数 6、对象数组、对象引用、对象指针 7、组合类 8、静态成员 9、友元 实 验 内 容 和 要 求 1、阅读“程序 1.txt”,然后回答以下问题: 1)行 A 定义了一个类 Test 的对象,它将调用哪个构造函数? 2)行 A 能否写成 Test t1();? 为什么不可以或者可以? 3)行 B 定义了另一个对象,它将调用哪个构造函数? 4)解释第二个构造函数的函数体中用到 this 指针的原因:? 5)解释行 C 数组 p 的含义? 2、阅读“程序 2.txt”,然后回答以下问题: 1)行 A 中动态申请的数组为何还要将数组大小加 1? 2)String 类中是否还存在默认的构造函数“String();“? 3)行 B 开始的构造函数称之为 构造函数。解释其功能 4)执行行 C 时会调用哪个构造函数? 5)上机验证该程序。 3、阅读“程序 3.txt”,然后回答以下问题: 1)执行行 A 后,a1.c= a2.c= A::c= 2)执行行 B 后,a1.c= a2.c= A::c= 3)行 B 可否改为”A::c=400;” 为什么 4)c 为类 A 的私有成员,但行 D 中为何通过 t 能直接访问成员 c? 5)执行行 E 后,a1.c= a2.c= A::c= 第 1 题、第 2 题和第 3 题不用抄题目,只需写答案在报告纸上。 4、定义一个点类 Point,包括数据成员点的 x 坐标和 y 坐标(int)、构造函数以及设置点 x,y 坐标的成员函数。定义一个 CRect 类,代表一个矩形,要求 CRect 类中有代表矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)点类的对象(组合类),要求 CRect 类中有三个成员函数 RectHeight()、RectWidth()以及area(),通过这三个函数能得到矩形的高和宽和面积。 要求 CRect 类中有构造函数,要求 CRect 类中有成员函数 SetR(),通过这函数能设置矩形的左上角坐标和右下角坐标。 5、建立一个类 primenum,求指定数据范围内的所有质数。具体要求如下: 1)私有数据成员 int data[25] 依次存放指定范围内求出的所有质数 int low,high 存放指定的数据范围的下限和上限 int num 存放 low 与 high 之间的质数的个数 2)公有成员函数 primenum(int low,int high) 构造函数,初始化 low 和 high,同时在函数体内初始化 num 为 0 int isprime(int x) 判断 x 是否为质数。若是质数,返回 1;否则,返回 0.void process() 求指定范围内的所有质数,把它们依次存放在数组 data,并将求出的质数个数存放在 num 中 void print() 输出求出的质数个数以及所有质数,要求每行输出 5 个质数。 3)在主函数中对该类进行测试。例如:定义一个 primenum 类的对象 test,指定查找范围为 100~200,求出 100~200 之间的所有质数。 实 验 过 程(算法、源代码以及注释) 实 验 结 果(记录程序执行的结果,分析结果) 实 验 总 结(记录程序在调试过程中出现的问题以及解决方法、总结收获和心得) 上机实验: 1、回文是指正读,反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,试用STACK类编写该程序。 #include int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位对原始数组的检测索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];} //将原始数组的一半元素入栈 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //从栈顶开始依次匹配 while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文数 free(cMyStack);return 1;} else {//不是回文数 free(cMyStack);return 0;} } 运行结果: 2.利用两个栈类S1、S2模拟一个队列时,编写一程序利用栈的运算实现队列的插入、删除以及判断队列空的运算。 #include template assert(!mStack2.empty());mStack2.pop();} template sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 运行结果: 实验2: 声明复数的类Complex,使用友元函数add实现复数的加法。 #include < iostream > using namespace std; class Complex { private: double real, image;public : Complex(){} Complex(double a,double b) { real = a;image = b;} void setRI(double a, double b){ real = a;image = b;} double getReal(){ return real;} double getImage(){ return image;} void print(){ if(image>0) cout<<“复数:”<< real <<“ + ”<< image <<“i”<< endl;if(image<0) cout<<“复数:”<< real <<“-”<< image <<“i”<< endl;} friend Complex add(Complex ,Complex);//声明友元函数 }; Complex add(Complex c1, Complex c2)//定义友元函数 { Complex c3; c3.real = c1.real + c2.real;//访问Complex类中的私有成员 c3.image = c1.image + c2.image;return c3;} void main(){ Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2); cout<<“复数一:”;c1.print();cout<<“复数二:”;c2.print();cout<<“相加后:”;c3.print();} 结果: 实验三: 7-5 定义一个基类Shape,在此基础上派生出一个Rectangle和Circle,二者都有getArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square.#include public: Shape(){} double GetArea() { return 0.1;} };class Rectangle: public Shape { public: Rectangle(double w,double h) { width=w;height=h;} double GetArea(){ return width*height;} private: double width,height;};class Circle:public Shape { private: double r; public: Circle(double rr){ r=rr;} double GetArea(){ return PI*r*r;} }; int main(){ Rectangle * rec=new Rectangle(5,6); Circle * cir=new Circle(5); cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 运行结果: 7-10.定义一个Object类,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数和析构函数的调用顺序。#include object(){ cout<<“构造object对象”< class box:public object { private: int Height,Width;public: box(){ cout<<“构造box对象”< C++课程设计报告 设计题目: 学 院: 专业班级: 学生姓名: 学生学号: 指导教师: 计算机技术与科学 3班 樊冠男 40912140 马军亮 提交时间: 2011/1/12 成绩: 目录 C++课程设计报告 第一章 引言 C++课程设计报告 第二章 概要设计 C++课程设计报告 第三章 软件实现 C++课程设计报告 第四章 结果与讨论第二篇:C++实验报告
第三篇:信息系C++实验报告(实验8)
第四篇:C++实验
第五篇:C++课程设计实验报告(范文)