静态成员和友元实验报告_第1页
静态成员和友元实验报告_第2页
静态成员和友元实验报告_第3页
静态成员和友元实验报告_第4页
静态成员和友元实验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[标准实验报告]南昌航空大学实验报告2011年11月11日课程名称:面向对象程序设计B实验名称:静态成员和友元班级:10202327姓名:吕潇同组人:指导教师评定:签名:实验目的(1)学习静态成员的使用,理解静态成员的特殊用途。(2)学习友元函数及友元类,领会友元类的作用。二、实验内容(本次实验要完成的内容)应用VC++6.0的编辑环境构造一个类Stack,设计一个整数链表类,实现栈操作。类中需有记录结点个数的数据成员(静态成员),要有判空操作。编制应用程序,取100次随机数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出(即出栈过程)求其和。用堆分配方法逐个产生满足条件(递增有序)的结点,插入栈中,每当出栈时,要及时将结点删除,求和工作放在类定义外(友元)。注意:栈中最多会有100个元素,最少会有一个元素,这是由条件(递增有序)决定的。具体说明如下:structSNode{intdata;SNode*next;};classStack{public: Stack(); ~Stack(); voidPush(inte);//insertadataintostack intPop();//deleteadatafromstack friendintGetSum(Stack&);//getsumofstack,friendfunction//friendclassgetsum;//getsumofstack,friendclass,youcantryitusingfriendclassstaticintnum;//staticnumberprivate: SNode*head;};对栈的入栈过程与出栈过程说明如下:入栈,即向栈中添加一个元素,且该元素只能添加到当前链表最后一个数据元素之后,此时记录数组元素数据个数的变量应该进行++操作;出栈,即从链表中删除一个数据元素,且该元素只能是当前栈中最后的一个元素,此时记录数据元素个数的变量应该进行--操作,也就是说,入栈及出栈的操作标识实际上是由记录数组中数据元素个数的变量实现的。判空,即判断当前栈(即链表)是否为空,也就是判断记录数组中数据元素个数的变量是否为0。三、概要设计(实现的功能,函数原型及说明等)应用VC++6.0的编辑环境构造一个类Stack,设计一个整数链表类,实现栈操作。类中需有记录结点个数的数据成员(静态成员),要有判空操作。编制应用程序,取100次随机数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出(即出栈过程)求其和。用堆分配方法逐个产生满足条件(递增有序)的结点,插入栈中,每当出栈时,要及时将结点删除,求和工作放在类定义外(友元)。structSNode{intdata;SNode*next;};链表结构体classStack{public: Stack();构造函数 ~Stack();析构函数 voidPush(inte);入栈 intPop(); 出栈friendintGetSum(Stack&);友元函数intGetSum(Stack&)函数原型staticintnum;静态变量用来计数private: SNode*head; 四、详细设计(程序中核心代码,并要有相应注释——函数功能、参数说明、重要语句的注解)intStack::num=0;//静态成员初始化Stack::Stack()构造函数初始化{ head=NULL;}Stack::~Stack()析构函数六、实验总结(对实验过程中出现的问题进行总结、指出程序中还需进一步完善的地方、在本次实验中学到的内容及自身不足等)对本次试验进行总结:作时应认真仔细。对代码进行分模块测试,应对实验整体架构进行了解。实验操保证其正确性。试验完后对错误进行总结分析。七、附录(源程序代码,需有相应注释)#include<iostream>#include<stdlib.h>#include<malloc.h>#include<stdio.h>#include<time.h>structSNode{ intdata;结构体structSNode*next;}SNode;classStack{private: SNode*head; staticintnum;//静态成员public:Stack(); ~Stack(); boolPush(inte);//进栈操作 intPop();//出栈操作 friendintGetSum(Stack&);//友元函数};intStack::num=0;//静态成员初始化Stack::Stack(){ head=NULL;}Stack::~Stack(){} boolStack::Push(inte){ SNode*p=newSNode; if(!p) returnfalse;p->data=e; p->next=head;head=p;num++; returntrue; }intStack::Pop()//出栈函数{ SNode*p=newSNode; inte; staticintcount=1;//静态存储变量,用于计数作用 p=head; e=p->data; head=p->next;free(p); count++; returne;}intGetSum(Stack&A)求和函数{ intSum=0; for(inti=0;i<A.num;i++) Sum+=A.Pop();//出栈求其和 returnSum;}intmain(){ StackA; srand((unsigned)time(NULL));inti=1,j;inty=rand()%1000+1; cout<<"所有满足要求的数为:"<<endl;while(i<100) { intx=rand()%1000+1; staticintcount=0;if(y<x){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论