• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
浅浅念
生如夏花之绚烂,死若秋叶之静美
博客园    首页    新随笔    联系   管理    订阅  订阅
友元

  定义:形如friend func1();使普通函数能够访问类的友元,实现位置可以在类外或类中,实现代码与普通函数相同,友元关系不能被继承,是单向,不具有交换性,

    在实现类之间数据共享时减少系统开销,提高效率等

  优点:能够提高效率,表达简单,清晰

  缺点:友元破坏了封装机制,尽量不使用友元

  声明:放在类的公有区和私有区都没有关系

  使用:1. 运算符重载的某些场合需要使用友元 2. 两个类要共享数据的时候

  实例:class INTEGER {

      friend void A::Print(const INTEGER &obj);  //声明这个类的友元函数,那么在其他地方调用这个函数就可以访问类的所有内容,声明时必须明确指出该成员函数属于哪个类

      friend class A;              //声明友元类

      };

      void Print(const InteGER &obj) {函数体}

      void main() {

        INTEGER obj;

        Print(obj);            // 调用友元函数

        }

      可以在一个头文件或源文件中定义多个类,然后将它们声明为各自的友元类,在源文件定义各自类中的函数时需要加域作用符

      在声明为某个类的友元之前,其必须是程序中的一个已经定义过的类,不能新声明一个类,然后说它是谁谁谁的友元

        public:void initialize();

        friend void g(X*, int);    // Global friend

        friend void Y::f(X*);      // Struct member friend

        friend struct Z;        //Entire struct is a friend

        friend void h();

        friend calss class-name

学习无他法,唯有持之以恒
posted on 2017-03-21 20:46  浅浅念  阅读(218)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3