友元类

    一个类 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 2022-09-07 16:10  莫水千流  阅读(313)  评论(0编辑  收藏  举报