首页 > 其他 > 详细

友元函数和友元类

时间:2020-05-24 11:48:22      阅读:46      评论:0      收藏:0      [点我收藏+]

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关键字申明想访问自己成员的其它类或者函数为自己的好朋友,这是一个允许

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

 

 

 

未完待续。。。。。。

友元函数和友元类

原文:https://www.cnblogs.com/yanghh/p/12945940.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!