类 友元


#include "stdafx.h"
#include <iostream.h>

//向前声明
class A;

class B
{
public:
    int GetAData( A& obj );
};

class A
{
public:
    int GetData() const
    {
        return m_i;
    }
    A():m_i(10)
    {
    };

    //friend
关键字 函数修饰符
    //
此函数和类A有友员关系(可以访问类A的私有成员)
    friend int GetAData( A& obj );   
    //B
的成员函数声明为A的友元函数
    friend int B::GetAData( A& obj );
   
    //
C是类A的友员类
    friend class C;   
private:   
    int m_i;
};

class C
{
public:
    int GetAData( A& obj )
    {
        return obj.m_i;
    }
    static int GetADataStatic( A& obj )
    {
        return obj.m_i;
    }
};

//
全局函数
int GetAData( A& obj )
{
    return obj.m_i;
}

//
成员函数
int B::GetAData( A& obj )
{
    return obj.m_i;
}

int main(int argc, char* argv[])
{
    A theA;
   
    B theB;
   
    C theC;
   
    cout << theA.GetData() << endl;
   
    cout << *(int*)&theA << endl;
   
    cout << "
非成员函数" << GetAData(theA) << endl;
   
    cout << "
友员成员函数" << theB.GetAData(theA) << endl;
   
    cout << "
友员类" << theC.GetAData(theA) << endl;
   
    cout << "
友员类 静态成员函数" << C::GetADataStatic(theA) << endl;
   
    return 0;
}

原文地址:https://www.cnblogs.com/w413133157/p/1654355.html