• 友元函数和友元类


    1. 友元函数

       类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。

       尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。申明友元函数的语句可以放在类中任意位置。

    class A
    {
    public:
        A() : a(100) {}
        int GetA() { return this->a; }
        friend void SetA(A *p, int a); // 声明一个友元函数, 这个函数是这个类的好朋友, 自己内部的东西对好朋友开放
        
    private:
        int a;
    };
    
    // 这里提供一个指向A类对象的指针,或者也可以通过其它方法给该函数提供A类对象(任意一个A类对象),以便访问
    void SetA(A *p, int a)
    {
        p->a = a;
    }
    
    int main()
    {
        A mya;
        cout << mya.GetA() << endl; 
        SetA(&mya, 300); //通过友元函数 修改A类的私有属性
        cout << mya.GetA() << endl;
        return 0;
    }
    

      

    2. 友元类

       若申明B类是A类的友员类,即A类中申明B类是自己的好朋友,则B类的所有成员函数都是A类的友员函数,

       A类中的所有成员都像好朋友B开放。

       友员类通常设计为一种对数据操作或类之间传递消息的辅助类。

    class CCar
    {
    private:
        int price;
        friend class CDriver;     //声明 CDriver 为友元类, 运行其访问自己的成员
    };
    
    class CDriver
    {
    public:
        CCar myCar;               // 既然想访问对方,自然持有对方的对象(任意一个)
        void ModifyCar()          // 改装汽车
        {
            myCar.price += 1000;  // 因CDriver是CCar的友元类,故此处可以访问其私有成员
        }
    };
    
    int main()
    {
        return 0;
    }
    

    最后:无论友元函数还是友元类,都是一个类主动使用friend关键字申明想访问自己成员的其它类或者函数为自己的好朋友,这是一个允许

          访问的过程,想去访问的函数或类是没有主动权的。

     

    未完待续。。。。。。

  • 相关阅读:
    AFN 控制字符报错(无法解析)
    HTTP POST请求报文格式分析与Java实现文件上传
    xcrun
    Makefile选项CFLAGS,LDFLAGS,LIBS
    Xcode 编译错误
    iOS 11 适配
    机器学习算法之决策树
    Python extend 和 append 的区别
    Python warning_function name should be lowercase
    使用matplotlib绘制导数图像
  • 原文地址:https://www.cnblogs.com/yanghh/p/12945940.html
Copyright © 2020-2023  润新知