请解答代码注释中的“问题”


#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; 这就是纯粹的指针赋值了