详解类与对象——友元

在这里插入图片描述
(^ _ ^)

一.基本性质

在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术

1.友元的目的就是让一个函数或者类 访问另一个类中私有成员

2.友元的关键字为 friend

3.友元的三种实现

  • 全局函数做友元

  • 类做友元

  • 成员函数做友元

    二.全局函数做友元

class Building

{

    //告诉编译器 goodGay全局函数 是 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 << "好基友正在访问: " << building->m_SittingRoom << endl;

    cout << "好基友正在访问: " << building->m_BedRoom << endl;

}

  
  

void test01()

{

    Building b;

    goodGay(&b);

}

  

int main(){

  

    test01();

  

    system("pause");

    return 0;

}

三.类做友元

class Building;//告诉编译器后面会出现building类

class goodGay

{

public:

  

    goodGay();

    void visit();

  

private:

    Building *building;

};

  
  

class Building

{

    //告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容

    friend class goodGay;

  

public:

    Building();

  

public:

    string m_SittingRoom; //客厅

private:

    string m_BedRoom;//卧室

};

  

Building::Building()//类外写成员函数

{

    this->m_SittingRoom = "客厅";

    this->m_BedRoom = "卧室";

}

  

goodGay::goodGay()

{

    building = new Building;//new什么类型就返回什么类型的指针

}
void goodGay::visit()//goodgay类下的visit函数

{

    cout << "好基友正在访问" << building->m_SittingRoom << endl;

    cout << "好基友正在访问" << building->m_BedRoom << endl;

}

  

void test01()

{

    goodGay gg;

    gg.visit();

  

}

  

int main(){

  

    test01();

  

    system("pause");

    return 0;

}

四.成员函数做友元

class Building;

class goodGay

{

public:

  

    goodGay();

    void visit(); //只让visit函数作为Building的好朋友,可以发访问Building中私有内容

    void visit2();

  

private:

    Building *building;

};

  
  

class Building

{

    //告诉编译器  goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容

    friend void goodGay::visit();

  

public:

    Building();

  

public:

    string m_SittingRoom; //客厅

private:

    string m_BedRoom;//卧室

};

  

Building::Building()

{

    this->m_SittingRoom = "客厅";

    this->m_BedRoom = "卧室";

}

  

goodGay::goodGay()

{

    building = new Building;

}

  

void goodGay::visit()

{

    cout << "好基友正在访问" << building->m_SittingRoom << endl;

    cout << "好基友正在访问" << building->m_BedRoom << endl;

}

  

void goodGay::visit2()

{

    cout << "好基友正在访问" << building->m_SittingRoom << endl;//公共权限

    //cout << "好基友正在访问" << building->m_BedRoom << endl;//私有权限

}

  

void test01()

{

    goodGay gg;

    gg.visit();

  

}

  

int main(){

    test01();
    system("pause");

    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值