类的友元

一、引入友元机制的原因

 

     1. 在不放弃私有数据安全性的情况下,使得类外部的函数或类能够访问类中的私有成员,在c++中就用友元作为实现这个要求的辅助手

         段。 

     2. 声明了一个类的友元函数,就可以用这个函数直接访问该类的私有数据,从而提高了程序运行的效率。(如果没有友元机制,外部函 

         数访问类的私有数据,必须通过调用公有的成员函数才能访问私有数据,这在需要频繁调用私有数据的情况下,会带来较大的开销,

         从而降低程序的运行效率)

     3. 方便编程,在某些情况下,如运算符被重载时,需要用到友元函数。

     4. 友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。

     5. 友元既可以是不属于任何类的一般函数,也可以是另一个类的成员函数,还可以是整个的一个类(这个类中的所有成员函数都可以成

         为友元函数)。

 

二、友元函数

 

      声明格式:

            friend 返回类型 函数名(参数表);

      说明:

            1. 声明友元函数时,可放在公共部分,也可放在私有部分;可定义在类内部,也可定义在类外部;

            2. 友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员和公有成

                员;

            3. 在类外部定义友元函数时,不必像成员函数那样,在函数名前加上“类名::”;(因为它不是成员函数)

            4. 友元函数一般带有一个该类的入口参数,它必须通过作为入口参数传递进来的对象名或对象指针来引用该对象的成员;(因为友

                元函数不是类的成员,所以它不能直接引用对象成员的名字,也不能通过this指针引用对象的成员)

      例子:

           

 

三、友元成员

 

      定义格式:

            friend 返回类型 函数所在类名::函数名(参数表);

      说明:

            1. 友元成员是指一个类的成员函数作为另一个类的友元函数;

            2. 一个类的成员函数作为另一个类的友元函数时,必须先定义这个类;

            3. 这种友元成员函数不仅可以访问自己所在类对象中的私有成员和公有成员,还可以访问friend声明语句所在类对象中的私有成员

                和公有成员,这样能使两个类相互合作、协调工作,完成某一任务。

      例子:

    

     程序结果:

           boy's name is: chen hao, age: 25

           girl's name is: zhang wei, age: 18  

 

四、友元类

 

      定义格式:

            friend 类名;

      说明:

            1. 友元类的声明可放在类的公有部分,也可以放在私有部分;

            2. 当一个类被说明为另一个类的友元时,它的所有的成员函数都可成为另一个类的友元函数,也就是说,作为友元的类中的所有

                成员函数都可以访问另一个类中的私有成员;

            3. 友元关系是单向的,不具有交换性,也不具有传递性。(如:类x是类y的友元,但类y不一定是类x的友元;类x是类y的友元

                类y是类z的友元,则类x不一定是类z的友元)   

       例子:

           

                 

                  程序结果:

                        boy's name is: chen hao, age: 25

                        girl's name is: zhang wei, age: 18  

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值