C++程序设计教程第10静态成员与友元

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++程序设计
湖南大学
杜四春、银红霞
10.2.2 友元类
C++允许说明一个类为另一个类的友元类(friend class)。
如果A是B的友员类,则A中的所有成员函数可以 像友员函数一样访问B类中的所有成员。定义格式如下:
class B { friend class A; //A的所有成员函数均为B的友员函数
10.2.1 友元函数
定义友元函数的方式是在类定义中用关键词friend 说明该函数,其格式如下:
friend <类型> <友元函数名> (<参数表>);
C++程序设计
湖南大学
杜四春、银红霞
友元函数说明的位置可在类的任何部位,既可在 public区,也可在protected区,意义完全一样。友元函 数定义则在类的外部,一般与类的成员函数定义放在 一起。
不存在“友元的友元”这种关系。假设类A是类B 的友元,而类B是类C的友元,即是说类B的成员函数 可以访问类C的受保护成员和私有成员,而类A的成员 函数可以访问类B的受保护成员和私有成员;但是,类 A的成员函数不可以直接访问类C的受保护成员和私有 成员,即是说友元关系不存在传递性。
toda
透达
数据成员,在对象c1和c2中都存在有各自的该数据成 员的副本;而b是静态数据成员,所有类Class1的对象 中的该成员实际上是同一个变量。C++编译器将静态 数据成员存放在静态存储区,该存储区中的所有数据 为类的所有对象所共享。
C++程序设计
湖南大学
杜四春、银红霞
10.1.2 静态成员函数
静态成员函数的定义和其他成员函数一样。但在 说明时需ຫໍສະໝຸດ Baidu意静态成员函数不得说明为虚函数。静态 成员函数与静态数据成员类似,也是从属于类,静态 成员函数的定义是在一般函数定义前加上static关键字。 调用静态成员函数的格式如下:
类的友元函数可以直接访问该类的所有成员,但
它不是成员函数,可以像普通函数一样在任何地方调 用。友员函数的定义方法是在类的任何地方象定义其 他函数一样定义该函数,并在其前面加上关键字friend即 可。 友员函数虽然在类内定义,但它不是这个类的成
员函数,它可以是一个普通函数,也可以是其他类的 成员函数,在其函数体中通过对象名访问这个类的私 有或保护成员。
静态成员函数没有this指针,因此,静态成员函数 只能直接访问类中的静态成员,若要访问类中的非静 态成员时,必须借助对象名或指向对象的指针。
C++程序设计
湖南大学
杜四春、银红霞
10.2 友元
友元提供了在不同类的成员函数之间、类 的成员函数与一般函数之间进行数据共享的机 制。通过友元,一个普通函数或另一个类中的 成员函数可以访问类中的私有成员和保护成员。 友元的正确使用能提高程序的运行效率,但破 坏了类的封装性和数据的隐蔽性。
//…
}
C++程序设计
湖南大学
杜四春、银红霞
友元关系不可以被继承。假设类A是类B的友元, 而类C从类B派生,如果没有在类C中显式地使用下面 的语句:
friend class A;
那么,尽管类A是类B的友元,但这种关系不会被 继承到类C,也就是说,类C和类A没有友元关系,类A 的成员函数不可以直接访问类C的受保护成员和私有成 员。
C++程序设计
湖南大学
杜四春、银红霞
C++程序设计
湖南大学
杜四春、银红霞
C++程序设计
湖南大学
杜四春、银红霞
C++程序设计
湖南大学
杜四春、银红霞
C++程序设计
湖南大学
杜四春、银红霞
class Class1
{ int a;
static int b;
//…
}c1,c2;
int Class1::b; 类Class1中包含两个数据成员a和b,其中a为一般
<类名>::<静态成员函数名>(<参数表>);
静态成员函数与静态数据成员一样,与类相联系, 不与对象相联系,只要类存在,静态成员函数就可以 使用,所以访问静态成员函数时不需要对象。如果用 对象去调用静态成员函数,只是用其类型。
C++程序设计
湖南大学
杜四春、银红霞
静态成员函数只能访问静态数据成员、静态成员 函数和类以外的函数和数据,不能访问类中的非静态 数据成员(因为非静态数据成员只有对象存在时才有 意义)。但静态数据成员和静态成员函数可由任意访 问权限许可的函数访问。和一般成员函数类似,静态 成员函数也有访问限制,私有静态成员函数不能由外 界访问。
相关文档
最新文档