C++友元函数和友元类用法详解( 二 )


下面我们来看一段代码 , 看看我们是如何利用友元来访问类的一切成员的:
#include <IOStream> using namespace std; class Internet { public: Internet(char *name,char *address) // 改为:internet(const char *name , const char *address){ strcpy(Internet::name,name); strcpy(Internet::address,address); } friend void ShowN(Internet &obj); //友元函数的声明 public:// 改为:privatechar name[20]; char address[20]; }; void ShowN(Internet &obj) //类外普通函数定义 , 访问a对象的保护成员name,不能写成,void Internet::ShowN(Internet &obj) { cout<<obj.name<<endl; //可访问internet类中的成员} void main() { Internet a("谷歌","http://www.google.cn/";); ShowN(a); cin.get(); } 示例2:
分别定义一个类A和类B  , 各有一个私有整数成员变量通过构造函数初始化;类A有一个成员函数Show(B &b)用来打印A和B的私有成员变量 , 请分别通过友元函数和友元类来实现此功能 。使用友元类 和 友元函数实现:
#include <iostream>using namespace std;class B;class A;void Show( A& , B& );class B{private:int tt;friend class A;friend void Show( A& , B& );public:B( int temp = 100):tt ( temp ){}};class A{private:int value;friend void Show( A& , B& );public:A(int temp = 200 ):value ( temp ){}void Show( B &b ){ cout << value << endl; cout << b.tt << endl; }};void Show( A& a, B& b ){cout << a.value << endl;cout << b .tt << endl;}int main(){A a;B b;a.Show( b );Show( a, b ); return 0;}



推荐阅读