C++面向对象进阶之friend 友元

1、友元是什么?
一句话:一种可以访问 private 权限的成员 的 方法

私有成员只能在类的成员函数内部访问,
如果想在别处访问对象的私有成员,只能通过类提供的接口成员函数)间接地进行,这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦

友元可以看成是现实生活中的 好闺蜜 或者是 好基友

2、友元函数
友元函数可以直接访问类中的私有成员

#include<iostream>

using namespace std;

class Car {
private:
    int num;
public:
    Car(int num) {
        this->num = num;
    }

    friend void test(Car c);
};

// 实现友元函数,函数内部可以直接访问私有成员
void test(Car bba) {
    cout << bba.num << "\n";  // 正常情况下,是不能访问private修饰的私有成员,但是友元函数中可以使用
}

int main() {
    Car bba(525);
    test(bba);
    return 0;
}

输出:525

3、友元类

一个类 A 可以将另一个类 B 声明为自己的友元,类 B 的所有成员函数就都可以访问类 A 对象的私有成员

#include<iostream>

using namespace std;

class Car {
private:
    int num;
public:
    friend class SSSS;  // 声明 4S 为友元类
    Car(int num) {
        this->num = num;
    }

    void display_num() {
        cout << "num=" << this->num << "\n";
    }
};

class SSSS {
public:
    void modify_car(Car *p) {  // 改装汽车
        p->num = 720;
    }
};


int main() {
    SSSS s4_shop;
    Car bmw(525);

    bmw.display_num();
    s4_shop.modify_car(&bmw);
    bmw.display_num();

    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥剑决浮云 -

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值