zoukankan      html  css  js  c++  java
  • 友元

    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;
           ...
    };
    注意:友元关系式不能被继承的。

     

     
  • 相关阅读:
    第二章:WebDriver 打开Firefox浏览器 和 Chrome 浏览器
    第一章:在 java 中配置 selenium jar 包的步骤
    第一章:Chrome 43 配置 java + selenium 环境
    第一章:火狐浏览器 : 环境配置: FireFox 版本38 + jdk 7 + selenium 2.53.6 + selenum-version 2.48.2
    抛弃CSDN博客 转移到 博客园来编写博客
    第一章:eclipse 中修改字体大小和编码格式
    2. VirtualBox 虚拟机:安装
    1. 在虚拟机中 添加内容
    第一章:selenium + java 环境安装 —— eclipse 中的使用
    实验二 Java面向对象程序设计
  • 原文地址:https://www.cnblogs.com/zhangmiao14/p/3751143.html
Copyright © 2011-2022 走看看