#include<iostream.h>
//Y类的不完全定义
class Y;

//X类的定义

class X
{
public:
void disp(Y py,char *name); //成员函数原型
};

//定义Y类

class Y
{
//声明本类的友元函数
//X类的disp()为本例的友元函数
friend void X::disp(Y py,char *name);
//普通函数putY() 为本例的友元函数
friend void putY(Y& yc,char *name);
private: //私有成员
int num;

dispY(char *name)
{
cout<<name<<".num="<<num<<endl;
}
public: //公共成员函数

Y(int n)
{
num=n;
}
};

//X类成员函数的实现部分

void X::disp(Y py,char *name)
{
cout<<"In X::disp():"<<endl;
py.dispY(name); //访问Y类的私有函数
}

//普通函数putY()的定义

void putY(Y& yc,char *name)
{
cout<<"In getY:"<<endl;
yc.dispY(name);
cout<<name<<".num=";
cout<<yc.num<<endl;
}

//在main()函数测试X和Y类的功能
main()


{
//创建Y和X类的对象
Y y1(100),y2(200);
X x;

//不可用Y类对象的私有成员函数显示
//y1.dispY("y1");
//y2.dispY("y2");

//调用X类对象的友元函数显示
x.disp(y1,"y1");
x.disp(y2,"y2");

//用getY函数显示Y类的对象显示
putY(y1,"y1");
putY(y2,"y2");
}
// Example of the friend class
#include <iostream.h>
//定义YourClass类,
class YourClass


{
//指定YourOtherClass是它的友元类
friend class YourOtherClass;
private:
int num;
public:

YourClass(int n)
{num=n;}

display(char *YCname)
{
cout<<YCname<<".num :";
cout<<num<<endl;
}
};
//定义YourOtherClass,它是YourClass类的友元类
class YourOtherClass


{
public:
//使用YourClass类的私有成员

void disp1(YourClass yc,char *YCname)
{
cout<<YCname<<".num :";
cout<<yc.num<<endl;
}
//使用YourClass类的公共成员

void disp2(YourClass yc,char* YCname)
{
yc.display(YCname);
}
};
//在main()函数中创建和使用YourClass和YourOtherClass类对象
main(void)


{
//声明YourClass类对象
YourClass a(10),b(100);

//显示a和b对象的值
cout<<"YourClass:"<<endl;
a.display("a");
b.display("b");

//声明YourOtherClass类对象
YourOtherClass temp;

//通过temp显示a和b对象的值
cout<<"YourOtherClass:"<<endl;
temp.disp1(a,"a");
temp.disp2(b,"b");
}

访问声明:
当为私有或为保护访问时,用using在子类中声明基类的公有成员后,在成员在子类中认为共有。
如果子类私有或保护继承自基类,那么此时子类的对象是不能调用基类公有的成员的。
class CBase
{
public print();
};
class CChild : private CBase
{
public:
using CBase::print(); //用了这句声明,main() is OK, 否则main中child 就不能调用print
}
void main()
{
CChild child;
child.print();
}