#include <iostream>
#include <string.h>
using namespace std;
class Student
{
public:
Student(char *pName = "No name")
{
cout<<"create one student\n";
strcpy(name,pName);
cout<<name<<endl;
noOfStudent++;//静态成员:每创建一个对象,学生人数+1
cout<<noOfStudent<<endl<<endl;
pNext = pFirst;//每创建一个节点(对象),就把他挂在链首
pFirst = this;
}
~Student()
{
cout<<"destruct one student\n";
cout<<name<<endl;
noOfStudent--;//每析构一个对象,学生人数-1
cout<<noOfStudent<<endl<<endl;
if (pFirst == this)
{
//如果要删除链表结点,则只要链首指针指向下一个
pFirst = this->pNext;
return;
}
for (Student *pS = pFirst; pS; pS = pS->pNext)
{
if (pS->pNext == this)
{
//找到时,pS指向当前结点
pS->pNext = this->pNext;
return ;
}
}
}
//静态成员函数
static int number()
{
return noOfStudent;
}
static Student* FindName(char *pName)
{
for (Student *pS = pFirst; pS; pS = pS->pNext)
{
if (strcmp(pS->name,pName) == 0)
{
return pS;
}
}
return (Student*)0;//返回空指针
}
protected:
static int noOfStudent;
static Student *pFirst;
Student *pNext;
char name[40];
};
//类声明只声明一个类的"尺寸与规格",并不进行实际的内存分配
//静态数据成员在类声明外分配空间和初始化
int Student::noOfStudent = 0;
Student* Student::pFirst = 0;
void fn()
{
Student s1;
Student s2;
cout<<Student::number()<<endl;//调用静态成员函数用类名引导
}
Student* fn2()
{
Student *pS = new Student("Jenny");
Student sb("Jone");
return pS;
}
int main()
{
/*fn();
cout<<Student::number()<<endl;*/
/*Student sa("Jamsa");
Student *sb = fn2();
Student sc("Tracy");
delete sb;*/
Student s1("Randy");
Student s2("Jenny");
Student s3("Kinsey");
Student *pS = Student::FindName("Jenny");
if (pS)
cout<<"ok."<<endl;
else
cout<<"no find."<<endl;
return 0;
}