全局函数、类成员函数 作为友元函数
#include "stdafx.h"
#include <iostream>
using namespace std;
#if 0
同类对象间无私处
异类对象间有友员
//函数(可以是全局函数,也可是类成员函数)可以作友元,称为友元函数
//友元的位置在类中哪个位置都可以 可以在private也可以在public
----前向声明(forward declaration):
是一种不完全型声明,
即只需提供类名(无需提供类实现)即可。 例如 class A; class B;
前向声明功能有限 :
(1)不能定义类的对象。(因为不知道对象的大小,确定不了空间)
(2)可以用于定义指向这个类型的指针或引用(因为指针和引用的大小确定,可以生成)
(3)用于声明(不是定义),使用该类型作为形参类型或者函数的返回值类型
友元的本质,是让其它不属于本类的成员(全局函数,其它类的成员函数) 成为类的成
员而具备了本类成员的属性
但仍然需要利用该类的对象去访问该类的数据成员
声明为哪个类的友元,就可以通过哪个类的对象访问其私有成员
#endif
class A; //前向声明
class B
{
public:
//前向声明可以定义引用,所以可以将A进行前向声明
void dis(A &t);
//但前向声明只能确定在此开辟的空间大小 却看不见数据成员x y z
//所以需要只在此处声明,而实现则放到 类A中的 x y z都声明完之后
};
class A
{
public:
//friend void dis(A&t); 等价于 friend void ::dis(A&t);全局函数 命名空间为空
friend void B::dis(A &t);
//此处用到B了 但它不是*或者&类型,所以将B进行前向声明不起作用
private:
int x;
int y;
int z;
};
void B::dis(A &t)
{
cout << t.x << t.y << t.z << endl;
}
//全局函数
//void dis(A &t)
//{
// cout << t.x << t.y << t.z << endl;
//}
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
for (int i = 0; i < 1000; i++)
b.dis(a); //对象a可以通过B类的函数访问A类的数据
}#include "stdafx.h"
#inc