预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

南昌航空大学实验报告 2011年11月9号 课程名称:面向对象程序设计B实验名称:静态成员与友元 班级:姓名:同组人:无 指导教师评定:签名: 一、实验目的 (1)学习静态成员的使用,理解静态成员的特殊用途。 (2)学习友元函数及友元类,领会友元类的作用。 二、实验内容 应用VC++6.0的编辑环境构造一个类Stack,设计一个整数链表类,实现栈操作。 类中需有记录结点个数的数据成员(静态成员),要有判空操作。编制应用程序,取100 次随机数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出 (即出栈过程)求其和。 用堆分配方法逐个产生满足条件(递增有序)的结点,插入栈中,每当出栈时,要 及时将结点删除,求和工作放在类定义外(友元)。 注意:栈中最多会有100个元素,最少会有一个元素,这是由条件(递增有序)决 定的。 三、概要设计 要实现的功能:构造一个类Stack、设计一个整数链表类,实现栈操作、取100次随机 数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出(即出栈过 程)求其和。 函数原型为: structSNode{ intdata; SNode*next; }; classStack{ public: Stack(); ~Stack(); voidPush(inte);//insertadataintostack intPop();//deleteadatafromstack friendintGetSum(Stack&);//getsumofstack,friendfunction //friendclassgetsum;//getsumofstack,friendclass,youcantryitusing friendclass staticintnum;//staticnumber private: SNode*head; }; 四、详细设计 定义类Stack的函数: Stack::Stack() { Head=newSNode; Head->next=NULL; } 设计一整数链表类,实现取100次随机数(<1000),如果取到的随机数比前一个随机数大的 话,入栈,然后逐个取出的栈操作的函数: voidStack::Push(inte) { SNode*p,*q; if(!(p=newSNode)) exit(0); p->data=e; q=Head; while(q->next) q=q->next; q->next=p; p->next=NULL; num++; } intStack::Empty() { return!num; } intStack::Pop() { inte; if(Empty()) { exit(0); } SNode*p,*q; p=Head;q=p; while(p->next) { q=p->next; if(!q->next) break; p=p->next; } p->next=NULL; e=q->data; deleteq; num--; returne; } intStack::GetTop() { inte; if(Empty()) { exit(0); } SNode*p; p=Head; while(p->next) { p=p->next; } e=p->data; returne; } 求和的函数为: intGetSum(Stack&a) { intsum=0,m,tmp; m=a.num; for(inti=0;i<m;i++) { tmp=a.Pop(); sum+=tmp; } cout<<endl; returnsum; } 五、程序调试 在函数调试的过程中,出现了以下错误提示信息: 1、“Stack::Empty”:函数调用缺少参数列表;请使用“&Stack::Empty”创建指向成员的指针 原因为将语句if(Empty())中的括号()漏掉了。 经调试无误后,运行的结果为: 六、实验总结 通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、 流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。 六、附录(源程序代码) #include<iostream.h> #include<stdlib.h> #include<time.h> #defineNULL0 structSNode{ intdata; SNode*next; }; classStack{ public: Stack(); ~Stack(); voidPush(inte); intPop(); intG