友元函数介绍

在程序设计中,加入类A想访问类B中的私有成员和私有函数时,为了保持程序的封装性,又让其有共享性,就用到了友元类和友元函数。

友元类

class A
{ 
    friend class B ;
public :
    void  Display() { cout << x << endl ; } ;
private :
    int  x ;
} ;
//上面在类A声明了它的友元类是B,所以类B可以访问A中私有成员和私有函数
class  B
{ 
public :
    void Set ( int i ) { Aobject . x = i ; } 
    void Display ()  { Aobject . Display () ; }
     //调用了类A的私有成员
private :
    A  Aobject ;//声明了类A的对象
} ;
void main()
{
    B  Bobject ;
    Bobject . Set ( 100 ) ;
    Bobject . Display () ;
    system("pause");
}
View Code

 

友元函数

友元函数应用比较多,常用的场合有:
1. 运算符重载的某些场合需要使用友元。
2. 两个类需要共享数据的时候。

class Test2
{
public:
    //友元函数的特点是:有一个参数是友元类的指针或引用.
    //友元函数是类外函数,所以声明放在公有段或者私有段没有区别。
    friend int OpMem(Test2 *p, int a); //友元函数,中有类对象指针,通过它访问类中私有成员
    Test2(int a, int b)
    {
        this->a = a;
        this->b = b;
    }
    int getA()
    {
        return this->a;
    }
protected:

private:
    int a ;
    int b;
};


int OpMem(Test2 *p, int a)
{
    p->a = a;//获取类中私有成员
    return 0;
}

void main()
{
    Test2 t1(1, 2);
    t1.getA();
    OpMem(&t1, 10);//直接调用友元函数,毕竟友元函数不是成员函数
    system("pause");
}
View Code

相关文章: