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

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类: C/C++

2009-04-11 15:52:06

   刚学完友元函数,现在来学习友元成员。友元函数是通过一个外部的函数来访问类的私有成员,那么能不能让类的一个成员函数去访问另外类的私有数据那,答案是肯定,c++提供了这一功能,可以在类中声明友元成员。
假定有两个类class boy,class girl.如果要让boy类具有访问girl类私有数据的方法,只要在girl类中声明boy类的某一成员函数是boy类的友元成员就可以了。
 
 

// 使用友元成员函数访问另一个类

#include <iostream.h>
#include <string.h>
class girl;            //向前引用
class boy{
    char *name;
    int age;
public:
    boy(char *N,int A)
    {    name=new char[strlen(N)+1];
        strcpy(name,N);
        age=A;
    }
    void disp(girl &);    //声明disp()为类boy的成员函数
    ~boy(){delete name;}
};

class girl{
    char *name;
    int age;
public:
    girl(char *N,int A)
    {    name=new char[strlen(N)+1];
        strcpy(name,N);
        age=A;
    }
    friend void boy::disp(girl &);    //声明类boy的成员函数disp()为类girl的友元函数

    ~girl(){delete name;}
};

void boy::disp(girl &x)
{    
    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);
}

通过上边的例子,可以知道,如果一个A类的成员函数能够访问另外一个B类的私有数据,只要将A的成员函数在B类中声明为B类的友元成员就可以了。声明的格式入下:

friend void boy::disp(girl &); //声明类boy的成员函数disp()为类girl的友元函数

这阳,boy类的方法disp(),就可以访问girl类中的私有数据了。

 

阅读(783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~