Chinaunix首页 | 论坛 | 博客
  • 博客访问: 590421
  • 博文数量: 201
  • 博客积分: 3076
  • 博客等级: 中校
  • 技术积分: 2333
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-02 19:44
文章分类

全部博文(201)

文章存档

2010年(118)

2009年(83)

我的朋友

分类: C/C++

2009-12-11 15:40:46

静态成员函数与普通成员函数的差别就在于缺少this指针,没有这个this指针自然也就无从知道name是哪一个对象的成员了。不能使用非static成员,可以传个对象参数进来使用。

  根据类静态成员的特性我们可以简单归纳出几点,静态成员的使用范围:

  1.用来保存对象的个数。

  2.作为一个标记,标记一些动作是否发生,比如:文件的打开状态,打印机的使用状态,等等。

  3.存储链表的第一个或者最后一个成员的内存地址。

  为了做一些必要的练习,深入的掌握静态对象的存在的意义,我们以前面的结构体的教程为基础,用类的方式描述一个线性链表,用于存储若干学生的姓名,代码如下:

#include <iostream
using namespace std; 
 
class Student 

public
    Student (char *name); 
    ~Student(); 
public
    char name[30]; 
    Student *next; 
    static Student *point; 
}; 
 
Student::Student (char *name) 

    strcpy(Student::name,name); 
    this->next=point; 
    point=this

 
Student::~Student ()//析构过程就是节点的脱离过程 

    cout<<"析构:"< 
    if(point==this
    { 
        point=this->next; 
        cin.get(); 
        return
    } 
    for(Student *ps=point;ps;ps=ps->next) 
    { 
        if(ps->next==this
        { 
        cout<next<<"|"<<this->next<        ps->next=next;//=next也可以写成this->next; 
        cin.get(); 
        return
        } 
    } 
    cin.get(); 

 
Student* Student::point=NULL; 
void main() 

    Student *c = new Student("marry"); 
    Student a("colin"); 
    Student b("jamesji"); 
    delete c; 
    Student *fp=Student::point; 
    while(fp!=NULL) 
    { 
        cout<name<        fp=fp->next; 
    } 
    cin.get(); 
}

  从上面的代码来看,原来单纯结构化编程需要的一个链表进入全局指针在这里被类的静态成员指针所替代(类的静态成员完全可以替代全局变量),这个例子的理解重点主要是要注意观察类成员的析构顺序,通过对析构顺序的理解,使用析构函数来进行节点的脱链操作。

阅读(624) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~