友元

定义:

    友元是一种函数与类 / 类与类之间的关系。

    在类中通过 friend 关键字来声明友元(函数/类)

    当一个函数与一个类发生了友元的关系,那么函数就是类的友元,函数就具有的友元的属性,

    并且友元是单向的,只能说函数是类的友元,不能说类是函数的友元。

 友元的特性:

       友元不是类的一部分,因此没有访问限制,因此类的友元可以访问具体类的所有成员。

      友元不具有传递性。

      类的友元可以是成员函数,可以是具体的类

#include <stdio.h>
#include <math.h>

class Point                    // 实体类
{
    double x;
    double y;
public:
    Point(double x, double y)
    {
        this->x = x;           // 通过this指针来访问当前对象的x,y变量
        this->y = y;
    }   
    double getX()
    {
        return x;
    }
    double getY()
    {
        return y;
    }   
    friend double func(Point& p1, Point& p2);        // 将实体函数和实体类建立友元联系,函数就是类的友元
};                                                   //  外部函数 func 具有了访问了类内部成员的属性

double func(Point& p1, Point& p2)       // 实体函数
{
    double ret = 0;  
    ret = (p2.y - p1.y) * (p2.y - p1.y) +   // 直接访问 Point 的私有成员
          (p2.x - p1.x) * (p2.x - p1.x);
          
    ret = sqrt(ret);
    return ret;
}

int main()
{
    Point p1(1, 2);
    Point p2(10, 20);
    
    printf("p1(%f, %f)
", p1.getX(), p1.getY());
    printf("p2(%f, %f)
", p2.getX(), p2.getY());
    printf("|(p1, p2)| = %f
", func(p1, p2));

    return 0;
}

友元的缺陷:

      破坏了对象的封装性。

      

原文地址:https://www.cnblogs.com/zsy12138/p/10827778.html