基于QT的异质链表实例

所谓的异质链表就是的节点元素类型能够不同。本实例採用C++抽象类和多态实现。

#include <QApplication>
#include<QPushButton>
#include<QLabel>
// 基类
class base
{
public:
  virtual void show()=0;
};

//异质链表
class LinkList
{
private:
    struct Node
    {
        base *pb;//数据域指针
        Node *next;
    };
    Node *phead;
public:
    void addNode(base *pb)
    {
        Node *pnode = new Node;
        pnode->pb=pb;
        pnode->next=NULL;
        if(phead==NULL)
        {
            phead=pnode;

        }
        else//採用头插法
        {
          pnode->next=phead;
          phead=pnode;
        }
    }
    void clearall()
    {

        if(phead==NULL)
        {
            return;
        }
         Node *pnode=phead;
         Node *ptmp;
         while(pnode!=NULL)
         {
            ptmp=pnode;
            pnode=pnode->next;
            delete ptmp;
         }
         phead=NULL;
    }

    void showall()
    {
         if(phead==NULL)
         {
             return;
         }
         Node *pnode=phead;
         while(pnode!=NULL)
         {
            pnode->pb->show();
            pnode=pnode->next;
         }
    }
    LinkList()
    {
        phead=NULL;
    }
    ~LinkList()
    {
        this->clearall();
    }

};

class MyButton:public base
{
private:
    QPushButton bt;
public:
    void show()
    {
        bt.setText("button");
        bt.show();
    }
};

class MyLabel:public base
{
private:
    QLabel label;
public:
    void show()
    {
        label.setText("label");
        label.show();
    }
};

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);

   LinkList list;
   MyLabel label;
   MyButton btn;

   list.addNode(&label);
   list.addNode(&btn);

    list.showall();
    return a.exec();
}
执行结果:


原文地址:https://www.cnblogs.com/zsychanpin/p/6800108.html