• 友元


    1.什么是友元

    在类中只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。

    为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。不过,类的访问权限确实在某些应用场合显得有些呆板,从而容忍了友元这一特别语法现象。
    2.友元函数
    如果友元是一般函数或类的成员函数,则称为友元函数。友元函数是拥有成员函数一切权利的非成员函数,也就是说,友元函数不是类的成员函数,但可以像成员函数一样直接访问类的私有成员(包括私有数据成员和成员函数)。
    定义格式:
    friend  返回类型   函数名  (参数列表);
    class   MYclass
    {
    public:
        ...
        friend void  add(int n);
        ...
    };
    友元函数特点:
         类的友元函数在类作用域之外定义,但可以访问类的私有和保护成员;
        尽管类定义中有友元函数原型,友元函数仍然不是成员函数;
        由于友元函数不是任何类的成员函数,所以不能用句柄(对象)加点操作符来调用;
        public, private, protected成员访问符与友员关系的声明无关,因此友元关系声明可在类定义的任何位置,习惯上在类定义的开始位置;
        友元关系是指定的,不是获取的,如果让类B成为类A的友元类,类A必须显式声明类B为自己的友元类;
        友元关系不满足对称性和传递性;
        如果一个友元函数想与两个或更多类成为友元关系,在每个类中都必须声明为友元函数;
    3.友元类
    如果友元是一个类,则称为友元类,友元类的所有成员函数都为友元函数。若B类是A类的友元类,则B类的所有成员函数都是A的友元函数,都可以访问A类的私有和保护成员。
    定义格式:
    class A
    {
        ...
        public:
            friend class B;
           ...
    };
    注意:友元关系式不能被继承的。

     

     
  • 相关阅读:
    jQuery的几个Grid插件简单比较
    位运算符
    Unity --- 纹理压缩基本知识点
    Unity---资源管理中不同资源的路径获取方式
    Unity--- 资源路径问题
    数据结构 --- 基本概念
    《UnityShader入门精要》学习笔记之渲染流水线
    UnityShader中的语义相关
    补充一下角度制与弧度制的相关知识
    NGUI中处理层级问题的几个方法总结
  • 原文地址:https://www.cnblogs.com/zhangmiao14/p/3751143.html
Copyright © 2020-2023  润新知