/*
一个常规的成员函数声明描述了三件在逻辑上互不相同的事:
1、该函数能访问类声明的隐私部分
2、函数位于类的作用域之中
3、该函数必须经由一个对象去激活,有一个this指针
通过将函数声明为static,可以让它只有前两种性质,
通过将一个函数声明为友元,可以使它只具有第一种性质
一个类把另一个类声明为友元类,则该类中的的所有方法都是对方的友元函数
*/
#include<iostream>
using namespace std;
class A{
private:
public:
void func1(){};
void func2(){};
};
class Test
{
friend class A;//把A声明为B的友元类,A中的所有方法都是B的友元函数
private:
int data;
public:
Test(int d = 0):data(d){}
~Test(){}
//void show(Test* const this)
void show()
{
cout << "data: " << data <<endl;
};
friend void print(Test&);//即是全局函数,又能操作类的隐私成员,像类的成员函数一样
};
void print(Test& t)
{
cout << "data: " << t.data <<endl;
t.data = 200;
}
int main()
{
Test t(100);
print(t);
t.show();
return 0;
}