您的位置:首页 > 编程语言 > Qt开发

基于QT的异质链表实例

2015-07-01 15:50 204 查看
所谓的异质链表就是的节点元素类型可以不同。本实例采用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();
}
运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: