




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+程序设计湖南大学 杜四春、银红霞第10章 静态成员与友元 10.1 静态成员 10.2 友元 10.3 友元应用实例 C+程序设计湖南大学 杜四春、银红霞静态成员是指声明为static的类成员在类的范围内所有对象共享某个数据。友元是一种定义在类外部的普通函数,但它需要在类的内部进行说明,为了与该类的成员函数加以区别,在说明时前面加上关键字friend。友元不是成员函数,但它可以访问类中的私有成员。其作用是提高程序的运行效率。C+语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的封装性和隐蔽性。友元可以是一个函数,称为友元函数,也可以是一个类,称为友元类。友元函数和
2、友元类统称为友元。 C+程序设计湖南大学 杜四春、银红霞10.1 静态成员类相当于一个数据类型,当说明一个某类的对象时,系统就为该对象分配一块内存单元来存放类中的所有成员。但在某些应用中,需要程序中属于某个类的所有对象共享某个数据。为此,一个解决的办法就是将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。 C+程序设计湖南大学 杜四春、银红霞10.1.1 静态数据成员静态数据成员C+中,同一个类定义多个对象时,每个中,同一个类定义多个对象时,每个对象拥有各自的数据成员不包括静态数据成对象拥有各自的数据成员不包括静态数据成员),而所有对象
3、共享一份成员函数和一份静员),而所有对象共享一份成员函数和一份静态数据成员。静态数据成员是类的所有对象中态数据成员。静态数据成员是类的所有对象中共享的成员,而不是某个对象的成员,因此可共享的成员,而不是某个对象的成员,因此可以实现多个对象间的数据共享。静态数据成员以实现多个对象间的数据共享。静态数据成员不属于任何对象,不属于任何对象, 它不因对象的建立而产生,它不因对象的建立而产生,也不因对象的析构而删除,它是类定义的一部也不因对象的析构而删除,它是类定义的一部分分,所以使用静态数据成员不会破坏类的隐蔽所以使用静态数据成员不会破坏类的隐蔽性。性。对静态数据成员的操作和一般数据成员一对静态数据成
4、员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访样,定义为私有的静态数据成员不能由外界访问。静态数据成员可由任意访问权限许可的函问。静态数据成员可由任意访问权限许可的函数访问。可以在类的成员函数中改变静态数据数访问。可以在类的成员函数中改变静态数据成员。成员。C+程序设计湖南大学 杜四春、银红霞静态数据成员不从属于任何一个具体对象,所以必须对它初始化,且对它的初始化不能在构造函数中进行。类中用关键字static修饰的数据成员叫做静态数据成员。说明一个静态数据成员的方法与说明一个一般静态变量一样,只不过前者是在一个类中说明。静态数据成员的使用方法如下:(1静态数据成员的定义与一般
5、数据成员相似,但前面要加上static关键词。 (2静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下: :=;(3在引用静态数据成员时采用格式::C+程序设计湖南大学 杜四春、银红霞class Class1 int a; static int b; /c1,c2;int Class1:b;类Class1中包含两个数据成员a和b,其中a为一般数据成员,在对象c1和c2中都存在有各自的该数据成员的副本;而b是静态数据成员,所有类Class1的对象中的该成员实际上是同一个变量。C+编译器将静态数据成员存放在静态存储区,该存储区中的所有数据为类的所有对象所共享。 C+程序设计湖南大
6、学 杜四春、银红霞10.1.2 静态成员函数静态成员函数静态成员函数的定义和其他成员函数一样。静态成员函数的定义和其他成员函数一样。但在说明时需注意静态成员函数不得说明为虚但在说明时需注意静态成员函数不得说明为虚函数。静态成员函数与静态数据成员类似,也函数。静态成员函数与静态数据成员类似,也是从属于类,静态成员函数的定义是在一般函是从属于类,静态成员函数的定义是在一般函数定义前加上数定义前加上static关键字。调用静态成员函关键字。调用静态成员函数的格式如下:数的格式如下::(););静态成员函数与静态数据成员一样,与类静态成员函数与静态数据成员一样,与类相联系,不与对象相联系,只要类存在,
7、静态相联系,不与对象相联系,只要类存在,静态成员函数就可以使用,所以访问静态成员函数成员函数就可以使用,所以访问静态成员函数时不需要对象。如果用对象去调用静态成员函时不需要对象。如果用对象去调用静态成员函数,只是用其类型。数,只是用其类型。 C+程序设计湖南大学 杜四春、银红霞静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员因为非静态数据成员只有对象存在时才有意义)。但静态数据成员和静态成员函数可由任意访问权限许可的函数访问。和一般成员函数类似,静态成员函数也有访问限制,私有静态成员函数不能由外界访问。静态成员函数没有this指针,因而,静态成员
8、函数只能直接访问类中的静态成员,若要访问类中的非静态成员时,必须借助对象名或指向对象的指针。 C+程序设计湖南大学 杜四春、银红霞10.2 友元友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性。10.2.1 友元函数定义友元函数的方式是在类定义中用关键词friend说明该函数,其格式如下:friend ();C+程序设计湖南大学 杜四春、银红霞友元函数说明的位置可在类的任何部位,既可在public区,也可在protec
9、ted区,意义完全一样。友元函数定义则在类的外部,一般与类的成员函数定义放在一起。类的友元函数可以直接访问该类的所有成员,但它不是成员函数,可以像普通函数一样在任何地方调用。友员函数的定义方法是在类的任何地方象定义其他函数一样定义该函数,并在其前面加上关键字friend即可。 友员函数虽然在类内定义,但它不是这个类的成员函数,它可以是一个普通函数,也可以是其他类的成员函数,在其函数体中通过对象名访问这个类的私有或保护成员。 C+程序设计湖南大学 杜四春、银红霞10.2.2 友元类友元类C+允许说明一个类为另一个类的友元类允许说明一个类为另一个类的友元类friend class)。)。如果如果A
10、是是B的友员类,则的友员类,则A中的所有成员函中的所有成员函数可以像友员函数一样访问数可以像友员函数一样访问B类中的所有成员。类中的所有成员。定义格式如下:定义格式如下:class B friend class A; /A的所有成员函数均为的所有成员函数均为B的友员函数的友员函数 / C+程序设计湖南大学 杜四春、银红霞友元关系不可以被继承。假设类A是类B的友元,而类C从类B派生,如果没有在类C中显式地使用下面的语句: friend class A; 那么,尽管类A是类B的友元,但这种关系不会被继承到类C,也就是说,类C和类A没有友元关系,类A的成员函数不可以直接访问类C的受保护成员和私有成员。 不存在“友元的友元这种关系。假设类A是类B的友元,而类B是类C的友元,即是说类B的成员函数可以访问类C的受保护成员和私有成员,而类A的成员函数可以访问类B的受保护成员和私有成员;但是,类A的成员函数不可以直接访问类C的受保护成员和私有成员,即是说友元关系不存在传递性。C+程序设计湖南大学 杜四春、银红霞10.3 友元应用实例例10-8:求两数的平方差。#include class Myclassprivate: int a,b,max,min;public: Myclass(int i,int j):a(i),b(j) max=(ab)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务部门预算编制与执行指导手册
- 钢结构防火涂料应用及施工技术
- 云南省安全员ab证考试题库及答案解析
- 入场安全培训试题瓦工及答案解析
- 癌痛病人的护理题库及答案解析
- 安全培训模拟考试题库及答案解析
- 房屋经纪从业资格考试及答案解析
- 护理操作题库及答案解析
- 护理综合核心题库及答案解析
- 人力资源培训方案与课程安排
- 食品营养学(暨南大学)智慧树知到答案章节测试2023年
- 日常伤口处理
- 2022年张掖市粮食和物资储备局事业单位人员招聘笔试试题及答案
- 2023年生态环境综合行政执法考试备考题库(含答案)
- GB/T 6682-2008分析实验室用水规格和试验方法
- 阿法拉伐中文说明书
- 新人教版三年级下册数学(新插图)搭配问题 教学课件
- 第六章设计心理的宏观分析
- GB/T 26335-2010工业企业信息化集成系统规范
- 海洋课-2、活跃的海岸
- GB/T 1.1-2009标准化工作导则 第1部分:标准的结构和编写
评论
0/150
提交评论