友元

友元出现的目的是为了访问和更新 友元类的private 和 protect 信息:

第一类: 类外的普通函数为友元类函数:

           

 1 #include<iostream>
 2 #include<string>
 3 #include<stdio.h>
 4 using namespace std;
 5 class boy{
 6       public:
 7       boy(string name,int age):name(name),age(age){}
 8           ~boy(){}
 9           //friend void  get(boy& b);//要有参数
10       private:
11           string name;
12           int age;
13 friend void  get(boy& b);//千万不要有了中文输入,有了就蛋疼了 
14  //既可以在 public处声明,也可以在private处声明,还可以在protect处声明
15 };
16 void get(boy& b)//类外的普通函数作为友元函数
17 {
18 cout<<b.name<<endl<<b.age<<endl;//直接访问类的私有成员 
19 }
20 int main()
21 {
22       boy a("guo",22);
23       get(a);
24       system("pause");
25       return 0;
26 }

      

 第二类:类外其他类的成员函数为友元函数

     

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
class boy;
class girl
{
   public:
       girl(string name,int age):name(name),age(age){}
       ~girl(){}
     void  get(boy& b);//这里要加void啊
   private:
       string name;
       int age;
};
class boy
{
   public:
       boy(string name,int age):name(name),age(age){}
       ~boy(){}
       friend void girl::get(boy& b);//类外其他类的成员函数为友元函数
   private:
       string name;
       int age;
};
void girl::get(boy& b)
{

    b.age++;
    cout<<b.age<<endl;
    cout<<b.name<<endl;//要这样使用必须加头文件 string

}
int main()
{
    boy a("guo",22);
    girl b("wu",22);
    b.get(a);
    system("pause");
    return 0;
}

     第三类:其他类直接为友元类:

      

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
class girl;//先声明girl类
class boy
{
      public:
          boy(string name,int age):name(name),age(age){}
          ~boy(){}
          void get(girl& b);
      private:
          string name;
          int age;
};
class girl
{
      public:
          girl(string name,int age):name(name),age(age){}
          ~girl(){}
      private:
          string name;
          int age;
          friend class boy;//其他类直接为友元类 boy类为girl的友元类,所以可以直接访问girl的name   age
};
void boy::get(girl & b)
{
    cout<<b.name<<endl<<b.age<<endl;
}
int main()
{
    boy a("guo",22);
    girl b("wu",22);
    a.get(b);
    system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/cs1003/p/2811027.html