• 友元


    友元出现的目的是为了访问和更新 友元类的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;
    }
  • 相关阅读:
    小程序面试题及答案
    Git常用指令
    《剑指offer》面试题23 从上往下打印二叉树 Java版
    《剑指offer》面试题22 栈的压入、弹出序列 Java版
    《剑指offer》面试题21 包含min函数的栈 Java版
    《剑指offer》面试题20 顺时针打印矩阵 Java版
    《剑指offer》面试题19 二叉树的镜像 Java版
    《剑指offer》面试题18 树的子结构 Java版
    《剑指offer》面试题17 合并两个排序的链表 Java版
    《剑指offer》面试题16 反转链表 Java版
  • 原文地址:https://www.cnblogs.com/cs1003/p/2811027.html
Copyright © 2020-2023  润新知