来源:www.cndev-lab.com | 2006-1-6 | (有2013人读过)
一个类的成员函数函数也可以是另一个类的友元,从而可以使得一个类的成员函数可以操作另一个类的数据成员,我们在下面的代码中增加一类Country,注意观察:
//程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream> using namespace std; class Internet;
class Country { public: Country() { strcpy(cname,"中国"); } void Editurl(Internet &temp);//成员函数的声明 protected: char cname[30]; }; class Internet { public: Internet(char *name,char *address) { strcpy(Internet::name,name); strcpy(Internet::address,address); } friend void Country::Editurl(Internet &temp);//友元函数的声明 protected: char name[20]; char address[20]; }; void Country::Editurl(Internet &temp)//成员函数的外部定义 { strcpy(temp.address,"edu.cndev-lab.com"); cout<<temp.name<<"|"<<temp.address<<endl; } void main() { Internet a("中国软件开发实验室","www.cndev-lab.com"); Country b; b.Editurl(a); cin.get(); }
整个类也可以是另一个类的友元,该友元也可以称做为友类。友类的每个成员函数都可以访问另一个类的所有成员。
示例代码如下:
//程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream> using namespace std; class Internet;
class Country { public: Country() { strcpy(cname,"中国"); } friend class Internet;//友类的声明 protected: char cname[30]; }; class Internet { public: Internet(char *name,char *address) { strcpy(Internet::name,name); strcpy(Internet::address,address); } void Editcname(Country &temp); protected: char name[20]; char address[20]; }; void Internet::Editcname(Country &temp) { strcpy(temp.cname,"中华人民共和国"); } void main() { Internet a("中国软件开发实验室","www.cndev-lab.com"); Country b; a.Editcname(b); cin.get(); }
在上面的代码中我们成功的通过Internet类Editcname成员函数操作了Country类的保护成员cname。
在编程中,我们使用友元的另外一个重要原因是为了方便重载操作符的使用,这些内容我们将在后面的教程着重讨论!
|