Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1612421
  • 博文数量: 245
  • 博客积分: 10378
  • 博客等级: 上将
  • 技术积分: 2571
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 08:19
文章分类

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类: C/C++

2009-04-11 16:16:20

  已经学习了友元函数、友元成员,这里要学习的是友元类,友元类的学习可以类比友元函数、友元成员的概念,友元的主要目的是为了是外部的函数能够访问该类的私有成员,只是为了这一个目的,如果访问该类私有成员的函数是一个单独的函数,不属于任何类的函数,这个函数就是友元函数,如果这个函数属于一个类,那么这个函数就叫做友元成员,而如果在类中声明友元函数的时候直接声明友元函数所属类,这个类就是该类的友元类。
 

//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++中,类的最大特定之一就是封装性,而时间上,没有必要让另外一个类的成员函数都有权限去访问某一个类,如果这样做的话,类的封装就完全的被破环了,同时,数据的安全性就毫无意义了。
阅读(1066) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~