#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;
}