已经学习了友元函数、友元成员,这里要学习的是友元类,友元类的学习可以类比友元函数、友元成员的概念,友元的主要目的是为了是外部的函数能够访问该类的私有成员,只是为了这一个目的,如果访问该类私有成员的函数是一个单独的函数,不属于任何类的函数,这个函数就是友元函数,如果这个函数属于一个类,那么这个函数就叫做友元成员,而如果在类中声明友元函数的时候直接声明友元函数所属类,这个类就是该类的友元类。
//boy为girl的友元类 #include <iostream.h> #include <string.h> class girl; class boy{ char *name; int age; public: boy(char *n,int d) { name=new char[strlen(n)+1]; strcpy(name,n); age=d; } void disp(girl &); //声明disp()为类boy的成员函数 ~boy(){delete name;} };
class girl{ char *name; int age; friend boy; //声明类boy是类girl的友元 public: girl(char *n,int d) { name=new char[strlen(n)+1]; strcpy(name,n); age=d; } ~girl(){delete name;} };
void boy::disp(girl &x) //定义函数disp()为类boy的成员函数,也是类girl的友元函数 { cout<<"boy\'s name is:"<<name<<",age:"<<age<<endl; cout<<"girl\'s name is:"<<x.name<<",age:"<<x.age<<endl; } void main() { boy b("chen hao",25); girl g("zhang wei",18); b.disp(g); }
|
个人认为,存在友元成员后,友元类的存在是没有意义的,只是在如果类中有多个成员函数要访问另外一个类的私有数据时,不用把每个的成员函数都在要访问类中一一的写为友元成员,只要在要访问的类中声明该类是要访问类的友元类就可以了,对c++中,类的最大特定之一就是封装性,而时间上,没有必要让另外一个类的成员函数都有权限去访问某一个类,如果这样做的话,类的封装就完全的被破环了,同时,数据的安全性就毫无意义了。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(766) | 评论(0) | 转发(0) |