C++笔记(二)友元

来源:互联网 发布:excel关联表格数据 编辑:程序博客网 时间:2024/06/06 04:03

友元机制允许一个类将对其非共有成员的访问权授予指定的函数或类。关键字friend。只能出现在类定义的内部。其声明尅在类中的任何地方。通常将友元声明成组地放在类定义的开始或结尾。

友元类:当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。

友元类可以通过自己的方法来访问把它当做朋友的那个类的所有成员。但是我们应该注意的是,我们把类B设置成了类A的友元类,但是这并不会是类A成为类B的友元。说白了就是:甲愿意把甲的秘密告诉乙,但是乙不见得愿意把乙自己的秘密告诉甲。即友元关系不具有对称性,也不具有传递性。

class girl;


class boy
{  
private:
    char *name;  
    int age;  
public:  
    boy();
    void disp(girl &);   
};  


void boy::disp(girl &x) //函数disp()为类boy的成员函数,也是类girl的友元函数 

    cout<<"boy's name is:"<<name<<",age:"<<age<<endl;//正常情况,boy的成员函数disp中直接访问boy的私有变量
cout<<"girl's name is:"<<x.name<<",age:"<<x.age<<endl; 
//借助友元,在boy的成员函数disp中,借助girl的对象,直接访问girl的私有变量
//正常情况下,只允许在girl的成员函数中访问girl的私有变量
}


class girl
{  
private:
    char *name;  
    int age;  
    friend boy;   //声明类boy是类girl的友元  
public:  
    girl();   
};  
void main()  
{   
    boy b;  
    girl g;  
    b.disp(g);  //b调用自己的成员函数,但是以g为参数,友元机制体现在函数disp中
}

友元函数:友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明。友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。一个函数可以是多个类的友元函数,只需要在各个类中分别声明。

class INTEGER
{  
private:
int num;
public:
friend void Print(const INTEGER& obj);//声明友元函数
};
void Print(const INTEGER& obj)//不使用friend和类::
{
//函数体
}
void main()
{
INTEGER obj;
    Print(obj);//直接调用
}

友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

友元函数和类的成员函数的区别:成员函数有this指针,而友元函数没有this指针。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4sid密码忘记了怎么办 苹果4忘记id密码怎么办 枣核吃到肚子里怎么办 芝麻分贷款不还怎么办 德国bm家不发货怎么办 金士顿u盘坏了怎么办 箱子的密码忘了怎么办 拉杆箱密码忘了怎么办? 拉杆箱忘了密码怎么办 拉箱密码忘了怎么办 飞行箱密码忘了怎么办 旅行箱密码乱了怎么办 手机sdk版本过低怎么办 cad标注数字太小怎么办 绿萝花肥施多了怎么办 大疆4云台抖动怎么办 三证合一后社保怎么办 三证合一后税务怎么办 身份证在深圳丢了怎么办 吃虾过敏皮肤痒怎么办 吃大头虾手掌痒怎么办 孩子支气管炎咳嗽老不好怎么办 抻筋了 很疼怎么办 短信验证码删了怎么办 对减肥药产生抗体了怎么办 被担保公司骗了怎么办 大学考查课挂了怎么办 大订书机卡针了怎么办 做原创的衣服该怎么办 4s店强制上牌怎么办 小孩一读书就哭怎么办 小孩上中班还哭怎么办 14岁初中生厌学怎么办 加拿大签证拒签了怎么办 离婚后不给孩子抚养费怎么办 格力空调出现e1怎么办 联想一键恢复后怎么办 微盘密码忘记了怎么办 乐高零件丢了怎么办 tpu手机壳变黄怎么办 脚被铁钉扎了怎么办