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

//X類的定義

class X
{
public:
void disp(Y py,char *name); //成員函數(shù)原型
};

//定義Y類

class Y
{
//聲明本類的友元函數(shù)
//X類的disp()為本例的友元函數(shù)
friend void X::disp(Y py,char *name);
//普通函數(shù)putY() 為本例的友元函數(shù)
friend void putY(Y& yc,char *name);
private: //私有成員
int num;

dispY(char *name)
{
cout<<name<<".num="<<num<<endl;
}
public: //公共成員函數(shù)

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

//X類成員函數(shù)的實(shí)現(xiàn)部分

void X::disp(Y py,char *name)
{
cout<<"In X::disp():"<<endl;
py.dispY(name); //訪問Y類的私有函數(shù)
}

//普通函數(shù)putY()的定義

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

//在main()函數(shù)測(cè)試X和Y類的功能
main()


{
//創(chuàng)建Y和X類的對(duì)象
Y y1(100),y2(200);
X x;

//不可用Y類對(duì)象的私有成員函數(shù)顯示
//y1.dispY("y1");
//y2.dispY("y2");

//調(diào)用X類對(duì)象的友元函數(shù)顯示
x.disp(y1,"y1");
x.disp(y2,"y2");

//用getY函數(shù)顯示Y類的對(duì)象顯示
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()函數(shù)中創(chuàng)建和使用YourClass和YourOtherClass類對(duì)象
main(void)


{
//聲明YourClass類對(duì)象
YourClass a(10),b(100);

//顯示a和b對(duì)象的值
cout<<"YourClass:"<<endl;
a.display("a");
b.display("b");

//聲明YourOtherClass類對(duì)象
YourOtherClass temp;

//通過temp顯示a和b對(duì)象的值
cout<<"YourOtherClass:"<<endl;
temp.disp1(a,"a");
temp.disp2(b,"b");
}

訪問聲明:
當(dāng)為私有或?yàn)楸Wo(hù)訪問時(shí),用using在子類中聲明基類的公有成員后,在成員在子類中認(rèn)為共有。
如果子類私有或保護(hù)繼承自基類,那么此時(shí)子類的對(duì)象是不能調(diào)用基類公有的成員的。
class CBase
{
public print();
};
class CChild : private CBase
{
public:
using CBase::print(); //用了這句聲明,main() is OK, 否則main中child 就不能調(diào)用print
}
void main()
{
CChild child;
child.print();
}