BZ易风

导航

 

友元语法

friend关键字只出现在声明处

其他类、类成员函数、全局函数都可声明为友元

友元函数不是类的成员,不带this指针

友元函数可访问对象任意成员属性,包括私有属性

友元类

friend  class 类名

友元类 是单向,不可传递的

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;

class House;    //先声明,防止报错
class GoodGay
{
public:
    GoodGay();        //类内声明
    void Visit();        //类内声明
    House * h;
};
class House
{
    friend class GoodGay;    //把好基友类添加为友元类
public:
    House();            //类内声明
    string m_SittingRoom;
private:
    string m_BedRoom;
};
GoodGay::GoodGay()            // 类外实现构造函数 好基友类的构造函数,创建House对象
{
    this->h = new House;
}
void GoodGay::Visit()        //类外实现成员函数 注意 返回值要与声明的一致
{
    cout << "好基友正在访问:" << this->h->m_SittingRoom << endl;
    cout << "好基友正在访问:" << this->h->m_BedRoom << endl;
}
House::House()
{
    this->m_SittingRoom = "客厅";
    this->m_BedRoom = "卧室";
}
void test()
{
    GoodGay g;    //调用GoodGay构造函数
    g.Visit();    //访问Visit成员方法
}

int main()
{
    test();
    system("Pause");        //阻塞功能
    return EXIT_SUCCESS;    // 返回正常退出
}

结果:

 

[友元类注意]

1.友元关系不能被继承。

2.友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。

3.友元关系不具有传递性。类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友。

 

posted on 2021-08-21 22:45  BZ易风  阅读(227)  评论(0编辑  收藏  举报