第五章静态成员与友元 本章内容: ■5.1静态数据成员 5.2静态函数成员 5.3静态成员指针 5.4 成员友元 5.5普通友元
第五章静态成员与友元 本章内容: 5.1 静态数据成员 5.2 静态函数成员 5.3 静态成员指针 5.4 成员友元 5.5 普通友元
5.1静态数据成员 静态成员包括静态数据成员和静态函数成员, 其有关访问权限的规定和普通成员一样。 静态数据成员用于描述类的总体信息,必须在 类的体外定义并初始化,union类不允许定义 静态数据成员 类的总体信息包括类的对象总数、连接所有对 象的链表表头等。在开发基于窗口平台的应用 软件时,可以通过存放窗口链表表头的静态数 据成员维护窗口
5.1 静态数据成员 静态成员包括静态数据成员和静态函数成员, 其有关访问权限的规定和普通成员一样。 静态数据成员用于描述类的总体信息,必须在 类的体外定义并初始化,union类不允许定义 静态数据成员。 类的总体信息包括类的对象总数、连接所有对 象的链表表头等。在开发基于窗口平台的应用 软件时,可以通过存放窗口链表表头的静态数 据成员维护窗口
【例5.1】定义插入和删除节点分别由构造函数和 析构函数自动完成的链表。 class LIST LIST:~LIST() int value; { LIST *next; ■ LIST *p=head; static LIST*head;/∥声明静态数据 if(head==this)head=this- 成员 >next; public: ■ else LIST(int value); ■ while(p->next!=this) LIST() p=p->next; p->next=this->next; LIST*LIST:head=O;/定义并初始化 静态数据成员 ■ ■ LIST:LIST (int v) ■ value=v; ■ next=head; ■ head=this;
【例5.1】定义插入和删除节点分别由构造函数和 析构函数自动完成的链表。 class LIST{ int value; LIST *next; static LIST *head;//声明静态数据 成员 public: LIST(int value); ~LIST( ); }; LIST *LIST::head=0;//定义并初始化 静态数据成员 LIST::LIST (int v) { value=v; next=head; head=this; } LIST::~LIST( ) { LIST *p= head; if(head==this) head=this- >next; else { while(p->next!=this) p=p->next; p->next=this->next; } }
5.1静态数据成员 void main(void) LIST a(1);/ /生成链首为节点a的链表 LIST b(2):/生成链首为节点b链尾为节点a 的链表 LIST c(3); 川生成链首为节点c链尾为节点 a的链表 b.LIST();/从链表删除节点b
5.1 静态数据成员 void main(void) { LIST a(1); //生成链首为节点a的链表 LIST b(2); //生成链首为节点b链尾为节点a 的链表 LIST c(3); //生成链首为节点c链尾为节点 a的链表 b.~LIST( ); //从链表删除节点b }
5.1静态数据成员 静态数据成员脱离具体对象独立存在,其存储 单元不是任何对象存储空间的一部分。所以, 在计算对象或类的空间大小时不能包括静态数 据成员。 静态数据成员独立分配一个存储单元,该存储 单元为所有对象所共享,而不是像普通数据成 员一样,为某个对象的一部分。 ■ 因此,对静态数据成员的访问不能通过this指 针,而必须采用如下所示的三种形式
5.1 静态数据成员 静态数据成员脱离具体对象独立存在,其存储 单元不是任何对象存储空间的一部分。所以, 在计算对象或类的空间大小时不能包括静态数 据成员。 静态数据成员独立分配一个存储单元,该存储 单元为所有对象所共享,而不是像普通数据成 员一样,为某个对象的一部分。 因此,对静态数据成员的访问不能通过this指 针,而必须采用如下所示的三种形式