友元函数(friend)

本文介绍了C++中的友元函数,包括如何使全局函数、成员函数成为友元以及整个类成为友元。友元函数能够访问类的私有成员,提供了一种打破数据隐藏的方式。通过实例展示了全局函数作为友元以及成员函数作为友元的用法,以实现特定的访问权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局函数 做 友元函数


    类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办?
    解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员,。
    程序员可以把一个全局函数、某个类中的成员函数、甚至整个类声明为友元。
    
    让全局的好基友函数 变为 我的好朋友 友元函数
    
    友元函数 目的:访问类中的私有成员属性
    
    全局函数做友元函数 
        全局函数 写到类中作声明 并在前面关键字 friend
        

class Building {
    friend void goodGay(Building* building);
public:
    Building() {
        this->m_SittingRoom = "客厅";
        this->m_BedRoom = "卧室";
    }

public:
    string m_SittingRoom;

private:
    string m_BedRoom;
};

void goodGay(Building* building) {
    cout << "A goodGay is visiting " << building->m_SittingRoom << "。" << endl;
    cout << "A goodGay is visiting " << building->m_BedRoom << "。" << endl;

}

void test8() {
    Building* building = new Building;
    goodGay(building);
}

让整个类 做友元类


    friend class 类名
    友元类 是单向, 不可传递的。

成员函数 做 友元函数 


    friend void goodGay::visit();

/*
    只让 visit 可以作 Building 的好朋友
    visit2 不可以访问私有属性
*/
class Building;
class goodGay {
public:
    goodGay();
    void visit();
    void visit2();
private:
    Building* building;
};
class Building {
    //让成员函数 visit 作为友元函数
    friend void goodGay::visit();
public:
    Building();

public:
    string m_SittingRoom;

private:
    string m_BedRoom;
};

goodGay::goodGay() {
    building = new Building;
}

void goodGay::visit() {
    cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;
    cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}

void goodGay::visit2() {
    cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;
    cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}

Building::Building() {
    this->m_SittingRoom == "客厅";
    this->m_BedRoom = "卧室";        
}

void test08() {
    goodGay gg;
    gg.visit();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值