高分悬赏:请高手看一下啊!分析一段C++程序~~谢谢~~

2025-06-26 17:41:26
推荐回答(2个)
回答1:

//明显的一个单向琏表定义
#include
#include
#include
#include
using namespace std;
class CData //定义一个数据类,在CNode节点中会用到
{
public:
CData(){};
virtual int comparename(CData &) =0;//没给出定义,不好说
virtual void show()=0;//没给出定义,返回为void居然=0,不知该杂理解
virtual ~CData(){};//虚函数的析构函数定义
};

class CNode //定义节点
{
public:
CNode(){pdata=0;pnext=0;} //无参构造函数定义
CNode(CNode &n); //带参构造函数声明
void inputdata(CData *pd){pdata=pd;} //输入数据函数定义
void shownode(){pdata->show();}//做CDate中的show()函数操作
CData *getdata(){return pdata;}//便于非友元访问数据指针
friend class CList;//琏表声明为友类,以便直接访问私有数据
private:
CData *pdata; //数据指针
CNode *pnext; //指向下一节点
};
CNode::CNode(CNode &n)//带参构造函数定义
{
pdata=n.pdata;
pnext=n.pnext;
}

class CList//琏表类定义
{
public:
CList(){phead=0;} //无参构造函数定义
~CList(){deletelist();} //析构函数
void addnode(CNode *pnode); //增加节点函数声明
void deletelist(); //清空琏表数据函数声明
CNode *deletenode(CNode *pnode); //删除节点声明
CNode *lookup(CData &data);//这是声明,不过下面的程序没看到定义,不好乱说
CNode *getlisthead(){return phead;}//得到表头指针
void showlist();//没给出定义,看名字应该是遍历琏表
CNode *getnext(CNode *pnode); //应该是得到下一节点指针
private:
CNode * phead; //定义节点头指针
};

void CList::addnode(CNode *pnode)//增加节点函数定义
{
if(phead==0)
{
phead=pnode;
pnode->pnext=0;
return;
}
else
{
pnode->pnext=phead;
phead=pnode;
}
}

void CList::deletelist() //清空琏表数据函数定义
{
CNode *p1,*p2;
p1=phead;
while(p1)
{
delete p1->pdata;
p2=p1;
p1=p1->pnext;
delete p2;
}
}
CNode *CList::deletenode(CNode *pnode) //删除节点函数定义
{
CNode *p1,*p2;
p1=phead;
while(p1!=pnode&&p1->pnext!=0)
{
p2=p1;
p1=p1->pnext;
}
if(p1==phead)
{
phead=phead->pnext;
return pnode;
}
p2->pnext=p1->pnext;

回答2:

这位同学程序不完整
不过可以简单分析下吧,

首先定义一个CData 类,类中有两个纯虚函数virtual int comparename(CData &) =0; 和virtual void show()=0;

class CNode 中定义了几个NODE的处理函数并声明为class CList; 的友元关系。Cnode中还定义了CData 的指针(注意是指针,CDate是抽像类)。

CList 类则是对多个CNode对象的处理操作。