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

第五章静态成员与友元 本章内容: ■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
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第4章 作用域及成员指针.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第3章 C++的类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第2章 C++的变量、类型及函数.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第1章 引论(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)课程简介(李瑞轩).pdf
- 南京大学:《软件工程导论 Introduction to Software Engineering Research》课程教学电子教案(课件讲义)04 Conduct Rigorous and Scientific Research(Experiment Design in Software Engineering Research).pdf
- 《编译原理 Principles and Techniques of Compilers》课程教学资源(学习资料)Assemblers,Linkers,and the SPIM Simulator(MIPS32 and SPIM).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验四 目标代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验三 中间代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验二 语义分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验一 词法分析与语法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)编译课程复习(许畅).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第一章 引论(许畅).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第三章 词法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第四章 语法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第五章 语法制导的翻译.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第六章 中间代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第七章 运行时刻环境.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第八章 代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第九章 机器无关的优化.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第6章 单继承类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第7章 虚函数(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第8章 多继承类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第9章 运算符重载.pdf
- 哈尔滨学院:《程序设计(C语言》课程教学大纲(理工类)Program Design(C language).pdf
- 运城学院:《微机原理与接口技术》课程教学大纲 Principles and Application of Micro-Computer(赵润林、朱铭琳、王晓丽).pdf
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题1.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题2 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题2.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题1 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题3.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题4 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题4.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题3 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题5.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题5 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题6 参考答案.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题6.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题7.doc
- 运城学院:《微机原理与接口技术》课程教学资源(仿真式题库)试题7 参考答案.doc