- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
静态成员与友元静态成员与友元学习本章后,应该掌握声明静态数据成员,掌握使用静态成员函数以及静态成员函数与特定对象无关的特性。掌握友元的使用,理解友元作用的局限性。第六章 静态成员与友元函数 §6-1 静态成员 §6-2 友元 §6-3 const数据保护§6-1 静态成员 6、1、1 静态成员的需要性有一些属性是类中所有成员所共有的,属于类的一部分,但既不适于用普通成员表示,也不适于全局变量表示的数据,用静态成员表示。 对象个数 对象链表头、尾指针 类的状态一个类对象的public成员可被本类的其他对象存取,即可供所有对象使用,然而此类的每个对象都各自拥有一份,不存在真正意义上的共享成员。因此,C++提供了静态成员,用以解决同一个类的不同对象之间数据成员和函数的共享问题。§6-1 静态成员 声明为static的类成员为静态成员,解决同一个类的不同对象之间的数据和函数共享问题。 静态成员的特点是:不管这个类创建了多少个对象,其静态成员在内存中只保留一份拷贝,这个拷贝为该类的所有对象所共享。 类的静态成员有两种:静态数据成员和静态函数成员,下面分别对它们进行讨论。6、1、2 静态数据成员 面向对象方法中还有类属性(class attribute)的概念,类属性是描述类的所有对象的共同特征的一个数据项,关于任何对象实例,它的属性值是相同的,C++通过静态数据成员来实现类属性。静态数据成员: 是类的数据成员的一种特例,采纳static关键字来定义,属于类属性,每个类只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同类的不同对象之间的数据共享。 6、1、2 静态数据成员 静态数据成员的定义分为两个必不可少的部分:类内声明、类外初始化。 在类内,声明静态数据成员的格式为 : static 数据类型 静态数据成员名; 在类外初始化的形式为: 数据类型 类名::静态数据成员名=初始值; 除了在初始化时能够在类外通过类对静态成员赋初值外,其他情况下对静态成员的存取规则与一般成员相同。即:在类内能够任意存取;在类外,通过对象只能访问存取属性为public的成员。 6、1、2 静态数据成员对静态数据成员的定义与使用应注意 :静态数据成员的访问属性同普通数据成员一样,能够为public、private和protected。静态数据成员脱离具体对象而独立存在,其存储空间是独立分配的,不是任何对象存储空间的一部分,但逻辑上所有的对象都共享这一存储单元,因此对静态数据成员的任何操作都将影响共享这一存储单元的所有对象。静态数据成员是一种特别的数据成员,它表示类属性,而不是某个对象单独的属性,它在程序开始产生,在程序结束时消失。静态数据成员具有静态生存期。由于在类的定义中仅仅是对静态数据成员进行了引用性声明,因此必须在文件作用域的某个地方对静态数据成员进行定义并初始化,即应在类体外对静态数据成员进行初始化(静态数据成员的初始化与它的访问控制权限无关)。静态数据成员初始化时前面不加static关键字,以免与一般静态变量或对象混淆。由于静态数据成员是类的成员,因此在初始化时必须使用类作用域运算符::限定它所属的类。 6、1、2 静态数据成员例如: 我们对某学校不同学生的特性进行抽象,找出共性设计一个学生类Student,假如需要统计学生的总人数,能够在类外定义一个全局变量。然而类外的全局变量不受类存取控制的保护。因此能够将学生人数定义为静态成员,即学生类的类属性, 设计的Student类如下 lass Student { private: char *Name; int No; static int countS; }; //在类外对静态成员初始化如下:int Student::countS=0;注意: 对静态数据成员的访问还能够通过类的成员函数来进行。 P335例子§6-1 静态成员#include iostream、hclass Myclass{ public: Myclass(int,int,int); void GetNumber(); void GetSum(); private: int A,B,C; static int Sum;};int Myclass::Sum=0;Myclass(int a,int b,int c){ A=a; B=b; C=c; Sum+=A+B+C; }void GetNumber(){cout“Number=”A“,”B “,”Cendl;}void GetSum(){cout“Sum=”Sumendl;}void main(){ Myclass M(3,7,10),N(14,9,11); M、GetNumber(); N、GetNumber(); M、
文档评论(0)