- 1
- 0
- 约9.47千字
- 约 28页
- 2018-02-26 发布于江苏
- 举报
【计算机】第10章 静态成员与友元
第10章 静态成员与友元 10.1 静态成员 10.2 友元 10.3 友元应用实例 静态成员是指声明为static的类成员在类的范围内所有对象共享某个数据。友元是一种定义在类外部的普通函数,但它需要在类的内部进行说明,为了与该类的成员函数加以区别,在说明时前面加上关键字friend。友元不是成员函数,但它可以访问类中的私有成员。其作用是提高程序的运行效率。C++语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的封装性和隐蔽性。友元可以是一个函数,称为友元函数,也可以是一个类,称为友元类。友元函数和友元类统称为友元。 10.1 静态成员 类相当于一个数据类型,当说明一个某类的对象时,系统就为该对象分配一块内存单元来存放类中的所有成员。但在某些应用中,需要程序中属于某个类的所有对象共享某个数据。为此,一个解决的办法就是将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。 10.1.1 静态数据成员 C++中,同一个类定义多个对象时,每个对象拥有各自的数据成员(不包括静态数据成员),而所有对象共享一份成员函数和一份静态数据成员。静态数据成员是类的所有对象中共享的成员,而不是某个对象的成员,因此可以实现多个对象间的数据共享。静态数据成员不属于任何对象, 它不因对象的建立而产生,也不因对象的析构而删除,它是类定义的一部分,所以使用静态数据成员不会破坏类的隐蔽性。 对静态数据成员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访问。静态数据成员可由任意访问权限许可的函数访问。可以在类的成员函数中改变静态数据成员。 静态数据成员不从属于任何一个具体对象,所以必须对它初始化,且对它的初始化不能在构造函数中进行。类中用关键字static修饰的数据成员叫做静态数据成员。说明一个静态数据成员的方法与说明一个一般静态变量一样,只不过前者是在一个类中说明。 静态数据成员的使用方法如下: (1)静态数据成员的定义与一般数据成员相似,但前面要加上static关键词。 (2)静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下: 类型 类名::静态数据成员=值; (3)在引用静态数据成员时采用格式: 类名::静态数据成员 class Class1 { int a; static int b; //… }c1,c2; int Class1::b; 类Class1中包含两个数据成员a和b,其中a为一般数据成员,在对象c1和c2中都存在有各自的该数据成员的副本;而b是静态数据成员,所有类Class1的对象中的该成员实际上是同一个变量。C++编译器将静态数据成员存放在静态存储区,该存储区中的所有数据为类的所有对象所共享。 10.1.2 静态成员函数 静态成员函数的定义和其他成员函数一样。但在说明时需注意静态成员函数不得说明为虚函数。静态成员函数与静态数据成员类似,也是从属于类,静态成员函数的定义是在一般函数定义前加上static关键字。调用静态成员函数的格式如下: 类名::静态成员函数名(参数表); 静态成员函数与静态数据成员一样,与类相联系,不与对象相联系,只要类存在,静态成员函数就可以使用,所以访问静态成员函数时不需要对象。如果用对象去调用静态成员函数,只是用其类型。 静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员(因为非静态数据成员只有对象存在时才有意义)。但静态数据成员和静态成员函数可由任意访问权限许可的函数访问。和一般成员函数类似,静态成员函数也有访问限制,私有静态成员函数不能由外界访问。 静态成员函数没有this指针,因此,静态成员函数只能直接访问类中的静态成员,若要访问类中的非静态成员时,必须借助对象名或指向对象的指针。 10.2 友元 友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性。 10.2.1 友元函数 定义友元函数的方式是在类定义中用关键词friend说明该函数,其格式如下: friend 类型 友元函数名 (参数表); 友元函数说明的位置可在类的任何部位,既可在public区,也可在protected区,意义完全一样。友元函数定义则在类的外部,一般与类的成员函数定义放在一起。 类的友元函数可以直接访问该类的所有成员,但它不是成员函数
您可能关注的文档
最近下载
- 24J306 窗井、设备吊装口、排水沟、集水坑.docx VIP
- 斩控式交流调压电路设计.doc
- 数据中心机房运维管理.pptx VIP
- 哈雷sportster车系电路工作原理与维修(四).pdf VIP
- 腭咽成形术后护理查房.pptx VIP
- 任务九 个人形象诊断与体型分析(课件)-《服装搭配实务(第2版)》同步教学(中国纺织出版社).pptx VIP
- 53透骨草(铁线透骨草)配方颗粒.docx VIP
- 数据中心机房运维管理培训教程(PDF120页).docx VIP
- TED中英官方演讲稿-JarrettJKrosoczka_2012X一个男孩成为艺术家的心路历程.docx VIP
- 高级英语精品课程教案——PubTalkandtheKing’sEnglish.doc
原创力文档

文档评论(0)