C++基础学习(8)——友元

友元

1. 什么是友元
  • 允许一个类将其非公有成员的访问权授予给指定的函数或类
  • 友元的声明只能出现在类定义的内部,通常放在类的开始或结尾
  • 友元不受访问控制的影响

说明:

  1. 访问类非公有成员可以有两个用户:类成员和友元
2. 友元函数
  • 友元函数:在一个类以外定义了函数并该类内部用friend声明了定义的函数,此函数就是这个类的友元函数,该函数可访问这个类的私有成员

    #include <iostream>
    #include <cmath>
    using namespace std;
    class Point{
    public:
        Point(int _x=0, int _y=0) : x(_x), y(_y) { };
    private:
        int x, y;
        friend double distance(Point & r1, Point& r2); // 友元函数
    };
    double distance(Point& r1, Point & r2)
    {
        double x = r2.x > r1.x ? r2.x - r1.x : r1.x - r2.x; // 访问Point类的私有成员
        double y = r2.y > r1.y ? r2.y - r1.y : r1.y - r2.y; // 访问Point类的私有成员
        return sqrt(x*x + y*y);
    }
    int main()
    {
        Point a(1, 1), b(5, 5);
        cout << distance(a,b);
        return 0;
    }
    
  • 友元成员函数:友元函数可以是另一个类的成员函数

3. 友元类
  • 可以把一个类(如类B)声明为另一个类(如类A)的友元,,这时类B就是类A的友元类,此时类B的所有成员函数可以访问类A的非公有数据成员

    class A{
        ...
        friend B;
    };
    
    class B{
        ...
    };
    
  • 友元的关系不是双向的:在类A中声明了类B是类A的友元类不等于类A是类B的友元类

  • 友元的关系不能传递继承:C是B的友元类,B是A的友元类,不等于C是A的友元类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值