C++类的友元

  友元是一个与访问控制权限相关的概念。C++语言可以在定义类的时候声明友元,向类外的某些函数或类定向开放类中的所有成员。被类声明为友元的函数称为该类的友元函数,被声明为友元的类称为该类的友元类

一、友元函数(可以设为类的内联函数)

友元函数的语法形式:

  class 类名

  {

    . . .

    frined 返回值类型 友元函数名(参数列表);//友元函数的原型声明

  }

友元函数的语法细则:

  1)在类声明部分声明友元函数额原型,声明时使用关键字friend。声明语句可以放在大括号内的任意位置,该位置的访问权限与友元函数无关。

  2)友元函数是类外的其他函数,不是类的成员。

  3)友元函数可以在其他函数体内访问该类对象的所有成员,不受权限约束。

  示例:

  class A

  { 

    public: int x;

    protected:  int y;

    private:   int z;

    public:

       A(int p1=0,int p2=0,int p3=0) {x=p1;y=p2;z=p3}

       frined void fun1();   //声明类外函数fun1为类A的友元函数,此时类外函数可以访问x,y,z

  }

二、友元类

  示例:

  class B

  {

    . . . 

    void fun1();

    void fun2();

  };

  class A

  {

    . . . 

    frined void B:: fun1(); //声明类B中的fun函数为类A的友元函数

  };

 如果类B中所有函数成员都是类A的友元函数,则称类B为类A的友元类。声明友元类时不需要逐个声明其函数成员,而是采用统一声明的语法形式:

  class A

  {

    . . . 

    frined class B; //声明类B为类A的友元类

  };

  声明为类A的友元类后,类B的函数成员就可以在函数体中访问A类对象的所有成员,包括保护成员和私有成员。

  注意:

  1)友元关系时单向的。若类A声明类B时自己的友元类,并不意味着A同时成为B的友元,除非对方声明。

  2)友元关系不能传递。假设类B时类A的友元,类C又是类B的友元,这并不意味着类A和C之间存在任何友元关系,除非它们自己单独声明。

posted @ 2022-07-18 22:21  KylinZhuang  阅读(111)  评论(0编辑  收藏  举报