友元函数介绍
在程序设计中,加入类A想访问类B中的私有成员和私有函数时,为了保持程序的封装性,又让其有共享性,就用到了友元类和友元函数。
友元类
class A { friend class B ; public : void Display() { cout << x << endl ; } ; private : int x ; } ; //上面在类A声明了它的友元类是B,所以类B可以访问A中私有成员和私有函数 class B { public : void Set ( int i ) { Aobject . x = i ; } void Display () { Aobject . Display () ; } //调用了类A的私有成员 private : A Aobject ;//声明了类A的对象 } ; void main() { B Bobject ; Bobject . Set ( 100 ) ; Bobject . Display () ; system("pause"); }
友元函数
友元函数应用比较多,常用的场合有:
1. 运算符重载的某些场合需要使用友元。
2. 两个类需要共享数据的时候。
class Test2 { public: //友元函数的特点是:有一个参数是友元类的指针或引用. //友元函数是类外函数,所以声明放在公有段或者私有段没有区别。 friend int OpMem(Test2 *p, int a); //友元函数,中有类对象指针,通过它访问类中私有成员 Test2(int a, int b) { this->a = a; this->b = b; } int getA() { return this->a; } protected: private: int a ; int b; }; int OpMem(Test2 *p, int a) { p->a = a;//获取类中私有成员 return 0; } void main() { Test2 t1(1, 2); t1.getA(); OpMem(&t1, 10);//直接调用友元函数,毕竟友元函数不是成员函数 system("pause"); }