c++中关于使用静态成员建立链表的问题

来源:百度知道 编辑:UC知道 时间:2024/09/19 16:18:28
#include "iostream.h"
#include "string.h"
class Student{
public:
Student(char* pname);
~Student();
protected:
static Student* pFirst;
Student * pNext;
char name[40];
};
Student* Student::pFirst = 0;
Student::Student(char* pname){
strcpy(name,pname);
name[sizeof(name) - 1] = '\0';
pNext = pFirst;
pFirst = this;
}
Student::~Student(){
cout<<this->name<<endl;
if(pFirst == this){
pFirst = pNext;
return;
}
for(Student* ps = pFirst;ps;ps = ps->pNext){
if(ps->pNext = this){
ps->pNext = pNext;
return;
}
}
}
Student* fn(){
Student* ps = new Student("one");
Student sb("Jone");
return ps;
}
void main(){
Student sa("two");
Student* sb = fn();
Student sc("t

没什么特别的啊,不过就是来个静态成员,作为头结点指针而已.
只要知道类的静态成员的特性就很容易理解了.
类的静态成员和类的实例无关,即使该类没有定义一个实例,该静态成员也存在.这样,当一个结点都还没有生成时,静态成员为0,正好表示指针为NULL.当生成了结点后,pFirst始终指向第一个结点.

我也刚学到链表..真的好难.....我还在看.

在这里你可以把static看成是一个全局变量, 链接主要是这两句
pNext = pFirst; //这是前插入, 应该看懂吧,pNext是新Student的, pFirst是前一个Student的, 也就是新Student的pNext指向旧链表的头结点.
pFirst = this; //注意this是指Student本身, 头结点指向新Student, 也就是新链表的头啦