zoukankan      html  css  js  c++  java
  • 友元

    定义:

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

        在类中通过 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;
    }

    友元的缺陷:

          破坏了对象的封装性。

          

  • 相关阅读:
    动态规划之矩阵连乘
    常见的开放符号服务器
    QT中的宏定义
    QT Creator项目路径设置
    批处理-日常小功能用法记录
    Qt Creator快捷键记录
    利用Navicat premium实现将数据从Oracle导入到MySQL
    php BCmath 封装类
    PHP 反射类
    Html标签生成类
  • 原文地址:https://www.cnblogs.com/zsy12138/p/10827778.html
Copyright © 2011-2022 走看看