#include <stdafx.h>
#include <iostream>
#include <string>
using namespace std;
//应用抽象类,建立了两种类型的表:队列与堆栈。
class list{ //申明一个抽象类;
public:
list *head; //表头指针;
list *tail; //表尾指针;
list *next;
int num;
list()
{
head=tail=next=NULL; //初始化指针为空值;
}
virtual void store(int i)=0; //纯虚函数store(存储);
virtual int retrieve()=0; //纯虚函数retrieve(检索);
};
class queue:public list{ //声明list的共有派生类queue(队列);
public:
void store(int i);
int retrieve();
};
void queue::store(int i) //定义虚函数store;
{ //问题,2015年10月17日11:27:50
list *item;
item=new queue; //queque类的一个零时对象的地址赋给item?
if(!item) //条件逻辑判断代表item的值是真或假,前两句中item的值有什么变化?
{
cout<<"Allocation error\n";
exit(1);
}
item->num=i;
if(tail)tail->next=item; //问题:语法?
tail=item;
item->next=NULL; //问题:语法?
if(!head)head=tail;
}
int queue::retrieve() //定义虚函数retrieve;
{
int i;
list *p;
if(!head)
{
cout<<"list empty\n";
return 0;
}
i=head->num;
p=head;
head=head->next; //问题:语法?与“item->next=NULL”类似
delete p;
return i;
}
class stack:public list{ //声明list的共有派生类stack(堆栈);
public:
void store(int i);
int retrieve();
};
void stack::store(int i) //定义虚函数store;
{
list *item;
item=new stack;
if(!item)
{
cout<<"Allocation error\n";
exit(1);
}
item->num=i;
if(head) item->next=head;
head=item;
if(!tail)tail=head;
}
int stack::retrieve() //定义虚函数retrieve;
{
int i;
list *p;
if(!head)
{
cout<<"list empty\n";
return 0;
}
i=head->num;
p=head;
head=head->next;
delete p;
return i;
}
int main()
{
list *p; //定义指向抽象类list的指针p;
queue q_ob;
p=&q_ob; //对象指针p指向类queue的对象q_ob;
p->store(1);
p->store(2);
p->store(3);
cout<<"queue:";
cout<<p->retrieve();
cout<<p->retrieve();
cout<<p->retrieve();
cout<<'\n';
stack s_ob;
p=&s_ob;
p->store(1);
p->store(2);
p->store(3);
cout<<"Stack:";
cout<<p->retrieve();
cout<<p->retrieve();
cout<<p->retrieve();
cout<<'\n';
getchar();
return 0;
}
语法?都是简单的语法,给指针赋值,有什么问题?
item=new queue;
不应该是new queue()吗?难道 这是c++的新特性?
if(!item) 这是判断item是否为空吧,类似javascript的undefined,取非则是有值得意思~
head=head->next; 这就是纯粹的指针赋值了