将类C的一个成员函数说明为类D的友元函数的一般格式: class D;/)类D作引用性说明 class ci 类C的成员定义 public void fun(d &) ∥)能给出函数的原型说明,因类D没有定义 class Di friend void c:fun(D&);∥定义友元函数 void C:: fun( &d) 始定义成员函数 2021/2/24 6
2021/2/24 6 将类C的一个成员函数说明为类D的友元函数的一般格式: class D; //对类D作引用性说明 class C{ … //类C的成员定义 public: void fun(D &); //只能给出函数的原型说明,因类D没有定义 }; class D{ … friend void C::fun(D &); //定义友元函数 }; void C::fun(D &d) //开始定义成员函数 {…}
将一个类M中所有成员说明成另一个类N的友元的一般格式 class Ni ∥)员定义 friend class m 说明类M是类N的友元 class Mi ∥成员定义 类M中的所有成员可使用类N中的全部成员,称类 M为类N的友元。 友元关系不传递, 不具有交换性,也 不具有继承性 2021/224
2021/2/24 7 将一个类M中所有成员说明成另一个类N的友元的一般格式: class N{ … //成员定义 friend class M; //说明类M是类N的友元 }; class M{ … //成员定义 }; 类M中的所有成员可使用类N中的全部成员,称类 M为类N的友元。 友元关系不传递, 不具有交换性,也 不具有继承性
例2:将一个类的成员函数用作另一个类的友元函数。 执行后输出: 1202 al x=25 al. y=40 b1.c=55 b1. d=66 al x=55 al. v=66 例2有关内容总结 1.定义了类A中的函数Sexy()是类B 的友员,建立了类和类的成员函数之 间的联系。使编程显得更便利。 2021/224 8
2021/2/24 8 例2:将一个类的成员函数用作另一个类的友元函数。 执行后输出: 1202 a1.x=25 a1.y=40 b1.c=55 b1.d=66 a1.x=55 a1.y=66 例2 有关内容总结 1. 定义了类A中的函数 Setxy( ) 是类 B 的友员,建立了类和类的成员函数之 间的联系。使编程显得更便利
2.友员成员函数可以访问并修改类的私有 或保护数据,调用类的私有或保护函数 使类不至于由于封装而增加了编程的复 杂性。 总的目标:使外部类的成员函数能访问修改类 的私有或保护数据、能调用类的私有或保护函 数。与友员类的区别是仅将部分成员函数声明 为友员,而不是整个类。 例3:把类作为友元 执行后输出: 1203 x=500y=500 Globalf->var=1000 21/2/24 9
2021/2/24 9 2. 友员成员函数可以访问并修改类的私有 或保护数据,调用类的私有或保护函数 使类不至于由于封装而增加了编程的复 杂性。 总的目标:使外部类的成员函数能访问修改类 的私有或保护数据、能调用类的私有或保护函 数。与友员类的区别是仅将部分成员函数声明 为友员,而不是整个类。 例3:把类作为友元。 执行后输出: 1203 x=500 y=500 GlobalF->var=1000
例3有关内容总结 1.定义了类F2是类F的友员,建立了 类之间的联系。使编程显得更便利 2.友员可以访问并修改类的私有和保护数 据,调用类的私有和保护函数,使类不 至于由于封装而增加了编程的复杂性。 总的目标:使外部类能访问修改类的私有或 保护数据、能调用类的私有或保护函数。 2021/224 10
2021/2/24 10 例3有关内容总结 1. 定义了类 F2是类 F 的友员,建立了 类之间的联系。使编程显得更便利。 2. 友员可以访问并修改类的私有和保护数 据,调用类的私有和保护函数,使类不 至于由于封装而增加了编程的复杂性。 总的目标:使外部类能访问修改类的私有或 保护数据、能调用类的私有或保护函数