当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第5章 静态成员与友元

资源类别:文库,文档格式:PDF,文档页数:41,文件大小:101.84KB,团购合买
5.1 静态数据成员 5.2 静态函数成员 5.3 静态成员指针 5.4 成员友元 5.5 普通友元
点击下载完整版文档(PDF)

第五章静态成员与友元 本章内容: ■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指 针,而必须采用如下所示的三种形式

5.1静态数据成员 ①类名:静态数据成员名,如 LIST:head; ②对象名.类名:静态数据成员名,如 a.LIST:head; ③对象名.静态数据成员名如a.head

5.1 静态数据成员 „ ① 类名::静态数据成员名,如 LIST::head; „ ②对象名.类名::静态数据成员名,如 a.LIST::head; „ ③对象名. 静态数据成员名 如a.head

5.1静态数据成员 静态数据成员为所有对象所共享,因 此,任何对象对静态数据成员的修改都 会影响其它对象对该静态数据成员的访 问值 类中静态数据成员的说明为引用性说明, 必须进行定义性说明,并且只能在类的体 外进行唯一的一次说明.注意在体外定义 静态成员时,不需要static关键字

5.1 静态数据成员 „ 静态数据成员为所有对象所共享,因 此,任何对象对静态数据成员的修改都 会影响其它对象对该静态数据成员的访 问值。 „ 类中静态数据成员的说明为引用性说明, 必须进行定义性说明,并且只能在类的体 外进行唯一的一次说明. 注意在体外定义 静态成员时,不需要static关键字

【例5.2】定义描述个人信息的类,使每个人都 共享人口数量这一信息。 #include ■ HUMAN:HUMAN(char #include *n,char s,int a) class HUMAN char name[11]; ◆ strncpy(name,n,10); char sex; ■ sex=s; int age; ■ age=a; public: HUMAN:total++; static int total; ◆ HUMAN(char *n, HUMAN:~HUMAN() char s,int a); HUMAN() HUMAN:total -- i int HUMAN:total=0;

【例5.2】定义描述个人信息的类,使每个人都 共享人口数量这一信息。 „ #include „ #include „ class HUMAN{ „ char name[11]; „ char sex; „ int age; „ public: „ static int total; „ HUMAN(char *n, char s, int a); „ ~HUMAN( ); „ }; „ int HUMAN::total=0; „ HUMAN::HUMAN(char *n, char s, int a) „ { „ strncpy(name, n, 10); „ sex=s; „ age=a; „ HUMAN::total++; „ } „ HUMAN::~HUMAN( ) „ { „ HUMAN::total – – ; „ }

【例5.2】定义描述个人信息的类,使每个 人都共享人口数量这一信息。 void main(void) cout<<"HUMAN::total="<<HUMAN::total<<"\n"; cout<<"sizeof(int)="<<sizeof(int)<<"In"; HUMAN x("Xi",'M',20); ■ cout<<"sizeof(x)="<<sizeof(x)<<"\n"; cout<<"sizeof(HUMAN)="<<sizeof(HUMAN)<<"\n"; cout<<"HUMAN:total="<<HUMAN:total; ■ cout<<"x.total="<<x.total<<"\n"; HUMAN y("Yi",'F,18);/同时改变x.total和y.total cout<<"HUMAN:total="<<HUMAN:total; ■ cout<<"x.total="<<x.total; cout<<"y.total="<<y.total<<"n"; ■

【例5.2】定义描述个人信息的类,使每个 人都共享人口数量这一信息。 „ void main(void) „ { „ cout<<"HUMAN::total="<<HUMAN::total<<"\n"; „ cout<<"sizeof(int)="<<sizeof(int)<<"\n"; „ HUMAN x("Xi", 'M', 20); „ cout<<"sizeof(x)="<<sizeof(x)<<"\n"; „ cout<<"sizeof(HUMAN)="<<sizeof(HUMAN)<<"\n"; „ cout<<"HUMAN::total="<<HUMAN::total; „ cout<<" x.total="<<x.total<<"\n"; „ HUMAN y("Yi", 'F', 18);//同时改变x.total和y.total „ cout<<"HUMAN::total="<<HUMAN::total; „ cout<<" x.total="<<x.total; „ cout<<" y.total="<<y.total<<"\n"; „ }

5.1静态数据成员 ■输出: ■HUMAN:total:=O sizeof(int)=4 ■sizeof(x)=16 ■sizeof(HUMAN)=16 HUMAN:total=1 x.total=1 HUMAN:total=2 x.total=2 y.total=2

5.1 静态数据成员 „ 输出: „ HUMAN::total=0 „ sizeof(int)=4 „ sizeof(x)=16 „ sizeof(HUMAN)=16 „ HUMAN::total=1 x.total=1 „ HUMAN::total=2 x.total=2 y.total=2

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共41页,可试读14页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有