C++: 友元friend三种用法

友元 friend

让类外一些函数或者类访问私有属性,就需要使用友元。

🎈🎈友元的三种实现:

  • 全局函数做友元
  • 类做友元
  • 成员函数做友元
#include <iostream>
#include <string>

using namespace std;

class Building
{
    friend void goodGay(Building* building); //声明友元函数
public:
    Building()
    {
        m_SittingRoom = "客厅";
        m_Bedroom = "卧室";
    }
    string m_SittingRoom;

private:
    string m_Bedroom;

};

//全局函数
void  goodGay(Building* building) {
    cout << "SittingRoom"<<building->m_SittingRoom<< endl;
    cout << "BedRoom" << building->m_Bedroom << endl;
}

void test1() {
    Building building;
    goodGay(&building);
}
int main(){
    test1();
   
    system("pause");
    return 0;

}

类外友元

#include <iostream>
#include <string>

using namespace std;
class Building;
class MyFriend
{
public:

    MyFriend();
    void visit();//访问Building中的属性

    Building* building;//声明Building类型指针building

};
class Building {
    friend class MyFriend;//类外友元
public:
    Building();

public:
    string m_SittingRoom;

private:
    string m_BedRoom;
};

//类外写成员函数
Building::Building() { 
    m_SittingRoom = "SittingRoom";
    m_BedRoom = "BedRoom";
}

MyFriend::MyFriend() {
    building = new Building;//堆中创建新对象

}
void MyFriend::visit()
{
    cout << "MyFriend is visiting " << building->m_SittingRoom << endl;
    cout << "MyFriend is visiting " << building->m_BedRoom << endl;
}

void test()
{
    MyFriend mick;
    mick.visit();
}
int main() {
    test();
    system("pause");
    return 0;

}


成员函数做友元

#include <iostream>
#include <string>

using namespace std;
class Building;
 class MyFriend{
 public:
     GoodGay();

     void visit();
     void visit1();
     Building* building;
};
 class Building
 {
     friend void MyFriend::visit();
     friend void MyFriend::visit1();
 public:
     Building();
 public:
     string m_SittingRoom;

 private:
     string m_BedRoom;

 };

 Building::Building()
 {
     m_SittingRoom = "SittingRoom";
     m_BedRoom = "BedRoom";
 }

 MyFriend::MyFriend()
 {
     building = new Building;

 }
 void  MyFriend::visit()
 {
     cout << "MyFriend is visiting " << building->m_SittingRoom << endl;
     cout << "MyFriend is visiting " << building->m_BedRoom << endl;
 }
 void  MyFriend::visit1()
 {
     cout << "MyFriend is visiting " << building->m_SittingRoom << endl;
     cout << "MyFriend is visiting " << building->m_BedRoom << endl;
 }

 void test1()
 {
     MyFriend Kite;
     Kite.visit();
     Kite.visit1();
 }
int main() {
    test1();

    system("pause");
    return 0;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Michael_chemic

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

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

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

打赏作者

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

抵扣说明:

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

余额充值