本来 我们这边搬家我看到了一个本书 名字叫做vc++ 入门到精通 名字看起来很厉害
然后我大致翻了一下内容 这本书还可以吧 然后有一节讲的是 链表 我以前实现链表是关于结构体 比较多
然后类还真的没怎么写过 这次写了一下 感觉还是有点收获 然后我们看一下源码
#include "stdafx.h"
#include <stdio.h>
#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<iostream>
#include<map>
#include<time.h>
#include<queue>
#include "windows.h"
using namespace std;
class CNode
{
public:
CNode();
~CNode();
CNode *m_pnext;
int m_data;
private:
};
CNode::CNode()
{
m_pnext = NULL;
}
CNode::~CNode()
{
}
class Clist
{
public:
Clist();
~Clist();
CNode* Move();
void addnode(CNode* pNode);
void passlist();
CNode* m_pHeader;
int nodesum;
private:
};
Clist::Clist()
{
nodesum = 0;
m_pHeader = NULL;
}
Clist::~Clist()
{
if (nodesum > 0)
{
CNode *delenode = m_pHeader;
CNode *deletemp = NULL;
for (int i = 0; i < nodesum; i++)
{
deletemp = delenode->m_pnext;
delete delenode;
delenode = deletemp;
}
nodesum = 0;
delenode = NULL;
deletemp = NULL;
}
m_pHeader = NULL;
}
CNode* Clist::Move()
{
CNode* m_pmove =m_pHeader;
for (int i = 1; i < nodesum; i++)
{
m_pmove = m_pmove->m_pnext;
}
return m_pmove;
}
void Clist::addnode(CNode* addNote)
{
if (nodesum == 0)
{
m_pHeader = addNote;
}
else
{
CNode* ptemp = Move();
ptemp->m_pnext = addNote;
}
nodesum++;
}
void Clist::passlist()
{
if (nodesum > 0)
{
CNode* ptemp = m_pHeader;
printf("%5d", ptemp->m_data);
for (int i = 1; i < nodesum; i++)
{
ptemp = ptemp->m_pnext;
printf("%5d", ptemp->m_data);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Clist list;
for (int i = 0; i < 5; i++)
{
CNode *pNode = new CNode();
pNode->m_data = i;
list.addnode(pNode);
}
list.passlist();
printf("\n");
getchar();
return 0;
}
然后这里是ida
一直不明白 这里的v10起到了什么的作用 不过从这里可以看出 构造函数还有析构函数的 作用
但是这里的ida 是由符号表的 假如没有了 符号表
哈哈 那么如果没有了符号表 是不是看起来一脸懵鸭
那么就需要我们自己的经验来尽量还原了。。。
比如 还原类成员还有还原 函数 。。。
那么我们看一下类模板吧
#include "stdafx.h"
#include <stdio.h>
#include<iostream>
#include<iomanip>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<iostream>
#include<map>
#include<time.h>
#include<queue>
#include "windows.h"
using namespace std;
class cnet
{
public:
cnet* m_pnext;
char m_data;
cnet()
{
m_pnext = NULL;
}
};
class CNode
{
public:
CNode();
~CNode();
CNode *m_pnext;
int m_data;
private:
};
CNode::CNode()
{
m_pnext = NULL;
}
CNode::~CNode()
{
}
template<class Type>
class Clist
{
public:
Type* m_pHeader;
int nodesum;
Clist()
{
nodesum = 0;
m_pHeader = NULL;
}
~Clist()
{
if (nodesum > 0)
{
Type *delenode = m_pHeader;
Type *deletemp = NULL;
for (int i = 0; i < nodesum; i++)
{
deletemp = delenode->m_pnext;
delete delenode;
delenode = deletemp;
}
nodesum = 0;
delenode = NULL;
deletemp = NULL;
}
m_pHeader = NULL;
}
Type* Move()
{
Type* m_pmove = m_pHeader;
for (int i = 1; i < nodesum; i++)
{
m_pmove = m_pmove->m_pnext;
}
return m_pmove;
}
void addnode(Type* addNote)
{
if (nodesum == 0)
{
m_pHeader = addNote;
}
else
{
Type* ptemp = Move();
ptemp->m_pnext = addNote;
}
nodesum++;
}
void passlist()
{
if (nodesum > 0)
{
Type* ptemp = m_pHeader;
cout << ptemp->m_data;
for (int i = 1; i < nodesum; i++)
{
ptemp = ptemp->m_pnext;
cout << ptemp->m_data;
}
cout << endl;
}
}
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
Clist<CNode> list;
for (int i = 0; i < 5; i++)
{
CNode *pNode = new CNode();
pNode->m_data = i;
list.addnode(pNode);
}
list.passlist();
Clist<cnet> lists;
for (int i = 0; i < 5; i++)
{
cnet *pNode = new cnet();
pNode->m_data ='a'+i;
lists.addnode(pNode);
}
lists.passlist();
printf("\n");
getchar();
return 0;
}
其实这里的优势就是可以适应任何的 类型的节点 保证的复用性
然后我们看一下ida 里面的东西
这里还是 一如既往的。。。。。。emmm
反正还是当 编程文章看吧 23333