美文网首页
C++中的友元

C++中的友元

作者: nethanhan | 来源:发表于2017-10-14 10:41 被阅读0次

友元的介绍


  • 什么是友元?

    • 友元是C++中的一种关系
    • 友元关系发生在函数与类之间或者类与类之间
    • 友元关系是单项的,不能传递
  • 友元的用法

    • 在类中以 friend 关键字声明友元
    • 类的友元可以是其它类或者具体函数
    • 友元不是类的一部分
    • 友元不受类中访问级别的限制
    • 友元可以直接访问具体类的所有成员
  • 友元的语法

    • 在类中用 friend 关键字对函数或类进行声明
class Point
{
    double x;
    double y;
    
    friend void func(Point& p);
};

void func(Point& p)
{

}

在这里举一个栗子:

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

class Point
{
    double x;
    double y;
public:
    Point(double x, double y)
    {
        this->x = x;
        this->y = y;
    }
    
    double getX()
    {
        return x;
    }
    
    double getY()
    {
        return y;
    }
    
    //声明一个友元函数   
    friend double func(Point& p1, Point& p2);
};

double func(Point& p1, Point& p2)
{
    double ret = 0;
    //在友元函数中,可以直接通过对象获取到所有成员变量,无权限限制
    ret = (p2.y - p1.y) * (p2.y - p1.y) +
          (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)\n", p1.getX(), p1.getY());
    printf("p2(%f, %f)\n", p2.getX(), p2.getY());
    //这里直接使用友元函数
    printf("|(p1, p2)| = %f\n", func(p1, p2));
    
    
    return 0;
}

友元的尴尬


  • 缺点:

    • 友元是为了兼顾C语言的高效而诞生的
    • 友元直接破坏了面向对象的封装性
    • 友元在实际产品中的高效是得不偿失的
    • 友元在现代软件工程中已经逐渐被遗弃
  • 注意事项

    • 友元关系不具备传递性
    • 类的友元可以是其它类的成员函数
    • 类的友元可以是某个完整的类

相关文章

  • c++ 友元

    在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。...

  • C++中的友元

    友元的介绍 什么是友元?友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单项的,不能传递...

  • C++中的友元模版

    友元在C++中意味着不好的设计,因忽略访问属性的限制,破坏了封装性。我却很喜欢这个特性。特别说明,这个特性适合库作...

  • 7. C++友元函数和友元类

    7.1 友元函数 C++只有本类中的函数可以访问本类的 private 成员。 但一种情况例外,那就是友元(fri...

  • 2001.C++BASE-friend(友元)

    转:关于C++中的友元函数的总结 1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少...

  • C++语言基础(03)

    1.内存分配 C/C++ 内存分区: java 创建对象 2.常函数 3.友元函数和友元类 友元函数 友元类 4....

  • c++语法2

    接上篇我们继续学习静态成员、友元函数、继承、多重继承,继承访问权限等 静态成员与友元函数:c++中静态成员与jav...

  • C++友元

    friend类: 如果class A想让class B访问它的成员,只需要在class A中将class B声明称...

  • C++友元

    我承认你是我的朋友,你才是,当有一天,我觉得你有背叛我,除了你的名,你就再也不会进入我的内心。

  • C++ 友元

    ​ 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一 般定义为公有的,依此提供...

网友评论

      本文标题:C++中的友元

      本文链接:https://www.haomeiwen.com/subject/fmjxuxtx.html