#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;
}
語法?都是簡單的語法,給指針賦值,有什麼問題?