首页 > 代码库 > 友元函数友元类.

友元函数友元类.

友元可以理解为是类的“朋友”,它可以访问类的保护和私有成员。友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。 

一、友元函数

友元函数是在类外定义的一个函数,不是类的成员函数。这个函数可以是普通的C++函数,或者是其他类的成员函数。即普通友元函数和友元成员函数。友元函数是定义在类外部,但需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元函数可以访问类中的保护和私有成员

注:友元函数只是打破了类的访问权限,但要访问类成员还是需要依靠类对象进行,不能与类的继承混了。

二、友元函数的定义

普通友元函数的定义:

    friend  类型标识符  友元函数名(参数列表);

友元成员函数(即将其它类的成员函数声明为该类的友元函数)的定义:

    friend  类型标识符  其他类名 ::  友元函数名(参数列表);

注:1、frined关键字只需要在类声明时加,定义时不需要加;

2、可以将一个普通的全局函数声明为类的友元函数,也可以将另一个类的成员函数声明为此类的友元。

如:friend void CStore::f2(int y); //在以引用其它类定义时,需要在本类定义前对其进行声明,如 class CStore;

三、友元函数与类之间的关系 


具体实例:

youyuan1.cpp  //普通函数作为友元

友元类函数:

Class Cstudent;  //此处特别重要,Cstudent类在此之前并未声明,此句称为提前引用声明,目的是让编译器知道Cstudent类的名字已经登记在册了,后面可以引用这个名字。

Class CTeacher

{

public:

      //教师的成员函数,修改某学生的成绩

      void ChangeGrades(Cstudent &s); 

private

}

void CTeacher ::ChangeGrades(Cstudent &s)

{      //友元成员函数访问私有成员

        s. Grade[0]=78;

}

Class Cstudent

{

public: 

        //将教师类的成员函数说明为学生类的友元函数

        friend void CTeacher::ChangeGrades(Cstudent &s);  

private

        int Grade[3];

};

四、友元类

一、友元类

       一个类可以作另一个类的友元称为友元类。

       当一个类作为另一个类的时,意味着这个类的所有成员函数都是另一个 

类的友元函数,可以访问另一个类的私有成员

 二、声明友元类的语法形式

      friend  class 类名;

例如:将A类声明为B类的友元类

Class  B

 {

……

    friend class A;      // 声明A为B的友元类

……

  }; 

注意:

友元关系不具有交换性,即是单向的;

友元关系不具有传递的。

友元函数友元类.