C/C++ 初学简单笔记 —2.1— 类的友元

来源:互联网 发布:淘宝号申请注册 编辑:程序博客网 时间:2024/05/18 01:11
类的友元。

C++为解决效率的需要,提出了一个友元的概念。

只要把某个类外函数声明为该类的友元,就可以直接访问类中的任何成员(public,protect,private)

也就相当于说,开放了一个后门,既然是开后门,那么自然是在该类里面说明。

所以,所有的友元声明都应该在该类中。


1)将普通函数声明为类的友元,

如:
class A
{
    private:
       int id;
    friend void display(A &a);     // 开了一个后门给 display
};
void display(A &a)      
{
     cout<<a.id<<endl;       // 因为开了后门,所以可以直接访问

};


2)将某个类声明为本类的友元类

如:
class A
{
   private:
       int id;
   friend class B;
}; 
class B
{
      public:
           static void showA(A &a)
           {
             cout<<a.id<<endl;
           }

}; 


3)将某个类的成员函数声明为本类的友元函数, 开放权限给某个成员函数

参考代码如下:
#include <iostream>

using namespace std;

class A;   // 因为在类A的定义之前,类B用到了A,所以要先在这里做引用性声明

class B
{
    public:
        void showA(A &a);
}; 

class A
{
    private:
        int id;
    public:
        A(int id):id(id){};

        // 注意:开放给其他类,那么其他类必须在此前已经有完整定义了!
        friend void B::showA(A &a);    // 要通过‘::’运算符表示开放权限给哪个类的成员函数
};

// 友元的成员函数,必须定义在该类的后面,不然找不到A的定义
void B::showA(A &a)
{
    cout<<a.id<<endl;
}

int main()
{
    A a(1);
    B b;
    b.showA(a);
    return 0;
}


1)友元都声明在类中,只是说明友元函数,友元类有权访问类的所有成员,但并不表明友元函数和友元类属于该类的成员。

2) 友元声明不受权限的限制,声明在哪一行都行。

3)用friend 修饰,一般使用对象的别名作为参数


2 0