• 友元函数


    友元可以访问包含该友元的类的private或者protected成员。(这里的友元指的是友元函数或者友元类)

    友元函数##

    友元函数的声明###

    friend <返回类型> <函数名> (<参数列表>);
    
    • 友元函数的声明必须在包含其的类内部,可以放在私有部分也可以放在共有部分。

    友元函数的作用域###

    • 全局作用域的友元函数:一个类的友元函数,且不作为其他类的成员函数,其作用域在全局作用域下。
    • 其他类成员作为该类的友元函数:当一个类的友元函数作为其他类的成员函数时,该函数只能通过类(前面的其他类)的对象进行访问(静态成员函数除外)。

    友元函数的定义###

    • 全局作用域的友元函数的定义可以在类内部和也可以在类外部,且不需要加类限定。
    • 作为其他类成员函数的友元函数的定义必须在类的外部。

    友元函数的调用###

    • 全局作用域的友元函数的调用不需要通过对象引用。
    • 其他类成员作为该类的友元函数只能通过类(前面的其他类)的对象进行访问(静态成员函数除外)。
    • 友元函数可以访问拥有其的类(不是其他类)中的私有成员和其他数据,但是需要通过对对象进行引用,对象通过函数参数传递。

    注意###

    • 一个函数可以是多个类友元函数。

    程序##

    全局作用域下的友元函数###

    #include <iostream>
    #include <string>
    using namespace std;
    
    
    class person{
    public:
        person(string str){
            name = str;
            age=0;
        }
        void disp(){
            cout<<"name : " << name << endl;
            cout<<"age : "<< age <<endl;
        }
    
    private:
        string name;
        int age;
    
        friend void setweigth(person &p,int w);
    };
    
    void setweigth(person &pn,int w) {
        pn.age=w;
    }
    
    int  main()
    {
        person p("zhansan");
        setweigth(p,23);
        p.disp();
    
    }
    

    友元函数作为其他类的成员函数###

    #include <iostream>
    using namespace std;
    
    class wheel;
    class car{
    public:
        car(string pn){
            name = pn;
        }
    
        void run(wheel &w);
    private:
        string name;
    };
    
    
    class wheel{
    public:
        wheel(int s){
            speed=s;
          }
        friend void car::run(wheel &w);
    private:
        int speed;
    };
    
    
    int  main(int argc, char const *argv[])
    {
        wheel w(60);
        car c("New car");
        c.run(w);
        return 0;
    }
    
    void car::run(wheel &w) {
        cout<<"the car is running"<<endl;
        cout<<"name: " << name << " speed :"<< w.speed << endl;
    }
    

    参考qq_26337701的博客

  • 相关阅读:
    Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API
    Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript
    Java 8 新特性-菜鸟教程 (6) -Java 8 Optional 类
    心理相关
    matlab和Visio安装
    论文资料搜集整理(研究现状)
    调式相关
    梅花落与折杨柳
    混合高斯模型——学习笔记
    NSCT,非下采样Contourlet变换——学习笔记
  • 原文地址:https://www.cnblogs.com/narjaja/p/9133757.html
Copyright © 2020-2023  润新知