【C++】友元

目录

1、友元目的

2、友元关键字

3、友元实现的三种方式


1、友元目的

让一个函数或类访问另一个类中私有成员

2、友元关键字

friend

3、友元实现的三种方式

* 全局函数做友元

//建筑物类
class Building
{
    //表明当前GoodF函数是好朋友,可以访问当前类中的私有成员
    friend void GoodF(Building *building);

pubilc:
    Building()
    {
         m_SittingRoom = "客厅";
         m_BedRoom = "卧室";
    }

public:
    string m_SittingRoom;//客厅

private:
    string m_BedRoom

};

//全局函数
void GoodF(Building *building)
{
    cout << "当前正在访问:" << building->m_SittingRoom << endl;

    cout << "当前正在访问:" << building->m_BedRoom << endl;
}

void test()
{
    Building building;
    GoodF(&building);
}

* 类做友元

class GoodF
{
public:

    GoodF();

    void visit(); //参观函数 访问Building中的属性

    Building * building;
};

class Building
{
    friend class GoodF;    

pubilc:
    Building();

public:
    string m_SittingRoom;//客厅

private:
    string m_BedRoom

};

//类外去写成员函数
Building::Building()
{
         m_SittingRoom = "客厅";
         m_BedRoom = "卧室";
}

GoodF::GoodF()
{
    //创建一个建筑物的对象
    building = new Building;
}

GoodF::visit()
{
    cout << "当前正在访问:" << building->m_SittingRoom << endl;
    cout << "当前正在访问:" << building->m_BedRoom << endl;
}

void test()
{
    GoodF bg;
    bg.visit();
}

* 成员函数做友元

class GoodF
{
public:

    GoodF();

    void visit(); //可以访问building中私有成员
    void visit2();//不可以访问building中私有成员

    Building * building;
};

class Building
{
    friend void GoodF::visit();    

pubilc:
    Building();

public:
    string m_SittingRoom;//客厅

private:
    string m_BedRoom

};

//类外去写成员函数
Building::Building()
{
         m_SittingRoom = "客厅";
         m_BedRoom = "卧室";
}

GoodF::GoodF()
{
    //创建一个建筑物的对象
    building = new Building;
}

void GoodF::visit()
{
    cout << "当前正在访问:" << building->m_SittingRoom << endl;
    cout << "当前正在访问:" << building->m_BedRoom << endl;
}

void GoodF::visit2()
{
    cout << "当前正在访问:" << building->m_SittingRoom << endl;
    //cout << "当前正在访问:" << building->m_BedRoom << endl;
}

void test()
{
    GoodF bg;
    bg.visit();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值