c++笔记15静态成员和友元.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
静态成员的需要性 静态成员的使用 静态数据成员 静态成员函数 需要友元的原因 友元的使用 静态成员是指声明为static的类成员在类的范围内所有对象共享某个数据。 友元是一种定义在类外部的普通函数,但它需要在类的内部进行说明,为了与该类的成员函数加以区别,在说明时前面加上关键字friend。友元不是成员函数,但它可以访问类中的私有成员。其作用是提高程序的运行效率。C++语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的封装性和隐蔽性。友元可以是一个函数,称为友元函数,也可以是一个类,称为友元类。友元函数和友元类统称为友元。 一、静态成员的需要性 类相当于一个数据类型,当说明一个某类的对象时,系统就为该对象分配一块内存单元来存放类中的所有成员。但在某些应用中,需要程序中属于某个类的所有对象共享某个数据。为此,一个解决的办法就是将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。 二、静态成员的使用 C++中在说明类成员(数据成员和成员函数)时,使用了static关键字,则这类成员称为类的静态成员。静态成员是所有对象公有的。静态成员有静态数据成员和静态函数成员之分。 C++中,同一个类定义多个对象时,每个对象拥有各自的数据成员(不包括静态数据成员),而所有对象共享一份成员函数和一份静态数据成员。静态数据成员是类的所有对象中共享的成员,而不是某个对象的成员,因此可以实现多个对象间的数据共享。静态数据成员不属于任何对象, 它不因对象的建立而产生,也不因对象的析构而删除,它是类定义的一部分, 所以使用静态数据成员不会破坏类的隐蔽性。 对静态数据成员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访问。静态数据成员可由任意访问权限许可的函数访问。可以在类的成员函数中改变静态数据成员。 静态数据成员不从属于任何一个具体对象,所以必须对它初始化,且对静态数据成员的初始化不能在构造函数中进行。类中用关键字static修饰的数据成员叫做静态数据成员。说明一个静态数据成员的方法与说明一个一般静态变量一样,只不过前者是在一个类中说明。 静态数据成员的使用方法如下: 1) 静态数据成员的定义与一般数据成员相似,但前面要加上static关键词。 2) 静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下: 类型 类名::静态数据成员=值; int Student :: noOfStudents = 0; 3)在引用静态数据成员时采用格式: 类名::静态数据成员 几点注意: 静态数据成员是类的一部分,静态数据成员的定义是类定义的一部分,将其放在类的内部实现部分中定义。定义时,要用类名引导。 静态数据成员的使用场合: (1)用来保存流动变化的对象个数;(如可能创建几个对象,每个对象要对某个磁盘文件进行写操作,但显然在同一时间里只允许一个对象写文件,在这种情况下,用户希望说明一个静态数据成员指出文件何时正在使用,何时处于空闲状态) (2)作为一个标志,指示一个特定的动作是否发生; (3)一个指向一个链表第一个成员或最后一个成员的指针。 //** ch15_1.cpp ** #include iostream.h #include string.h class Student { public: Student(char* pName =no name) //构造函数 { cout create one student\n; strncpy(name, pName,40); name[39]=\0; noOfStudents++; //静态成员:每创建一个对象,学生人数增1 cout noOfStudents endl; } ~Student() //析构函数 { cout destruct one student\n; noOfStudents--; //每析构一个对象,学生人数减1 cout noOfStudents endl; } static int number() //静态成员函数 { return noOfStudents; } protected: static int noOfStudents; //若写成noOfStudents=0;则非法 char name[40]; }; int Student::noOfStudents =0; //静态数据成员在类外分配空间和初始化 void fn() {

文档评论(0)

ldj215323 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档