●●● ●●●●● 友元函数 ●●● 为了增强类与类之间的沟通,可以将A类中的 某个成员函数是B类中的友元函数,这个成员 函数可以直接访问B类中的私有数据。这就实 现了类与类之间的沟通。 class ai class bi 既是类A的成员函数又是类B的友元函数 void fun(b &) friend void A: fun (b &
11 友元函数 • 为了增强类与类之间的沟通,可以将A类中的 某个成员函数是B类中的友元函数,这个成员 函数可以直接访问B类中的私有数据。这就实 现了类与类之间的沟通。 class A{ ... void fun( B &); }; class B{ ... friend void A::fun( B &); }; 既是类A的成员函数 又是类B的友元函数
●●● ●●●●● 友元函数 ●●● 注意:一个类的成员函数作为另一个类的友元 函数时,应先定义友元函数所在的类
12 友元函数 • 注意:一个类的成员函数作为另一个类的友元 函数时,应先定义友元函数所在的类
●●● ●●●●● 友元函数 ●●● class B;/先定义类A,则首先对类B作引用性说明 class At 类A中的成员函数 类A的成员定义 funO是类B的友元函 public: void fun(B&);/函数的原型说明 数。即在funO中可 以直接引用类B的私 class Bt 有成员。 friend void a:fun(B&);/定义友元函数 void a:fun(B&b)/函数的完整定义 /函数体的定义
13 友元函数 class B ; //先定义类A,则首先对类B作引用性说明 class A{ ...... //类A的成员定义 public: void fun( B & );//函数的原型说明 }; class B{ ...... friend void A::fun( B & );//定义友元函数 }; void A::fun ( B &b) //函数的完整定义 { ...... //函数体的定义 } 类A中的成员函数 fun()是类B的友元函 数。即在fun()中可 以直接引用类B的私 有成员
class b: ∥必须在此进行引用性说明, class at float x, y; public A(float a, float bi x=a; y=b; 3 float sum(B&);∥说明友元函数的函数原型,是类A的一成员函数 class bi 类A中有一个函数可以直 float m, n; 接引用类B的私有成员 olic lbl publIc B(float a, float bi m=a; n=b;3 friend floata:Sum(B&);/说明类A的成员函数是类B的友元函数 float A: Sum(b &b) ∥定义该友元函数 t xb. m+b n; y=b m-b n;) a1.x30 void main(void) 直接引用类B的私有成员 {Aal(3,5); al.y=-10 Bbl(10,20); a1Sum(b1);∥调用该函数,因是类A的成员函数,故用类A的对象调用
第一章 VC集成开发 环境 14 class B; //必须在此进行引用性说明, class A{ float x,y; public: A(float a, float b){ x=a; y=b;} float Sum(B &); //说明友元函数的函数原型,是类A的一成员函数 }; class B{ float m,n; public: B(float a,float b){ m=a;n=b; } friend float A::Sum(B &);//说明类A的成员函数是类B的友元函数 } float A::Sum( B &b) //定义该友元函数 { x=b.m+b.n; y=b.m-b.n; } void main(void) { A a1(3,5); B b1(10,20); a1.Sum(b1); //调用该函数,因是类A的成员函数,故用类A的对象调用 } a1.x=30 a1.y=-10 直接引用类B的私有成员 类A中有一个函数可以直 接引用类B的私有成员