如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
软件测试//1、data.h,存放要入队和出队的对象的类的声明#include<iostream.h>classBase{public:virtualvoidshow()=0;};classMyInt:publicBase{public:voidshow();MyInt();private:intid;};classMyString:publicBase{public:voidshow();MyString();private:Stringid;};//2、data.cpp,存放要入队和出队的对象的类的定义#include"data.h"MyInt::MyInt(){id=1;}voidMyInt::show(){cout<<"MyInt::id="<<id<<endl;}MyString::MyString(){id="Ilovebeijing";}voidMyString::show(){cout<<"MyString::id="<<id<<endl;}//3、stack.h,存放队列类的声明#include"data.h"classStackNode{Private:Base*data;StackNode*next;public:Node*wrapStackNode(Base*ptr);voidprint();};classStack{public:voidenterIn(StackNode*);StackNode*goOut();Stack();~Stack();private:Node*top;Node*rear;};//4、queue.cpp,存放队列类的定义#include"queue.h"Node*Node::wrapNode(BaseType*ptr){data=ptr;next=NULL;returnthis;}voidNode::print(){cout<<this->data->show()<<endl;}Queue::Queue(){front=rear=NULL;}Queue::~Queue(){if(front!=NULL){while(front!=rear){Nodetemp=front;front=front->next;deletetemp;}deletefront;}}voidQueue::enterIn(Node*ptr){if(rear==NULL)front=nodeptr;elserear->next=nodeptr;rear=nodeptr;cout<<"正在入队";rear->data->show();}Node*Queue::goOut(){Node*tempNode=front;if(front!=NULL)front=front->next;else{cout<<"空队列";returnNULL;}cout<<"正在出队!";returntempNode;}//5、main.cpp,主函数所在文件#include"queue.h"voidmain(){Node*out;MyIntmyIntobj;MyFloatmyFloatobj;QueuemyQueue;MyQueue.enterIn(myQueue.wrapNode(&myIntobj));MyQueue.enterIn(myQueue.wrapNode(&myFloatobj));out=myQueue.goOut();cout<<"出队后返回的对象的id是";out->print();}此题答案如下:(此题应该会考,这是老师讲了四节课的衍生题)上面的程序比较容易看懂了,见如下的图1表示的类图,注意到构造函数和析构函数可以省略就没有画。根据UML标准,当两个类对象满足天然语义上的组成聚集关系时使用聚集线,此时它们间为一种部分-整体关系;当存在成员可见性时不满足聚集关系表示固定的使用关系时,使用关联线;当存在参数可见性(或局部可见性)不存在成员可见时使用依赖线。(1)Node和Queue类之间:组成关系在天然语义上“队列”是包含“节点”的,因此Queue和Node间是聚集关系。(2)Node和BaseType类之间:固定使用关系,需要记录存储对应的关系。由于生成一个节点实例对象需要包