C++进阶—>friend

来源:互联网 发布:av马赛克去除软件mac 编辑:程序博客网 时间:2024/06/06 14:20

0.前言

friend友元,顾名思义是好朋友的意思,即我是你的好朋友,你所私有的东西会跟我分享,为我所用;通常分为友元函数和友元类。

1.友元函数

1)友元函数能够访问类中的私有变量;

2)友元函数可以定义在类中的任何位置,public、protected、private中均可;

3)友元函数为全局函数,在实现中无需加上类标识;

4)函数参数为类的对象,以便对类成员进行操作;

5)常用于对运算符或系统函数的重载。

说明:若要定义某个函数能够实现对某类变量操作,不管该函数是系统函数还是其他函数,均可通过在某类中使用friend关键字 定义友元函数,通过该友元函数可以实现对某类的操作,在友元函数的参数为类对象。

例子:

class AB{public:AB(){this->a=888;this->b=666;}AB(int a,int b){this->a=a;this->b=b;}friend void modifya(AB &ab);//void modifyb(AB &ab);void Print(){cout<<a<<b<<endl;}private:int a ;int b ;};void modifya(AB &ab){ab.a=88;}void main(){AB aaa;modifya(aaa);aaa.modifyb(aaa);aaa.Print();system("pause");return;}

2.友元类

1)若B类是A类的友员类,则B类的所有成员函数都是A类的友员函数;

2)友员类通常设计为一种对数据操作或类之间传递消息的辅助类;

3)友元类中需要定义类对象,如B类是A类的友员类,则B中要定义一个A的对象,以便对A进行操作。

例子:

class A{public:friend class B;//B类 是 A的好朋友 ,在B中可以访问A类的私有成员 私有函数//1 声明的位置 和 public private没有关系friend void modifyA(A *pA, int _a); //2 函数modifyA 是 类A的好朋友A(int a=0, int b=0){this->a = a;this->b = b;}int getA(){return this->a;}private:int a;int b;};//  void modifyA(A *pA, int _a){//pA->a = 100;pA->a = _a;}//class B{public:void Set(int a){Aobject.a = a;}void printB(){cout<<Aobject.a <<endl;}private:A Aobject;};void main(){B b1;b1.Set(300);b1.printB();system("pause");}







原创粉丝点击