随笔 - 741  文章 - 0  评论 - 260  阅读 - 416万

友元类

    一个类 A 可以将另一个类 B 声明为自己的友元,类 B 的所有成员函数就都可以访问类 A 对象的私有成员。在类定义中声明友元类的写法如下:

        friend  class  类名;

    友元类B类的所有成员函数,都能访问A类对象的私有成员;
    类 A 将类 B 声明为友元类,则类 B 最好从逻辑上和类 A 有比较接近的关系。例如上面的例子,CDriver 代表司机,CCar 代表车,司机拥有车,所以 CDriver 类和 CCar 类从逻辑上来讲关系比较密切,把 CDriver 类声明为 CCar 类的友元比较合理;
    友元类的关系是单向的,不是双向的,如果声明了A是B的friend,不等于B是A的friend;
    friend的关系不能传递。即类 A 是类 B 的友元,类 B 是类 C 的友元,并不能导出类 A 是类 C 的友元;
    friend函数不是类的成员函数,却可以访问该类的私有和保护成员,从严格意义上来说,这不符合面向对象原则;
    因此friend函数的使用时存在争议的,且容易被勿用;

#include <iostream>
using namespace std;
 
class A
{
    private:
       int a;
       friend class B; //友元类,即B类的所有成员函数都能访问A类对象的私有成员
};
 
class B
{
    private:
       int b;
    public:
       void printFunc()
       {
          A a;
          a.a=10;
          b=20;
          cout<< "a.a + b = " << a.a+b << endl;
       }
}
 
int main()
{
    B b;
    b.f();
    return 0;
}

posted on   莫水千流  阅读(379)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2020-09-07 android layerlist 里面的rotate标签得到三角形原理详解
2020-09-07 Android开发:shape和selector和layer-list的(详细说明)
2015-09-07 consist of, made up of
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示