c++之友元

博客介绍了C++中友元的概念和三种实现方式。友元技术可让类外特殊函数或类访问类的私有成员,目的是突破私有成员的访问限制。三种实现分别是全局函数做友元、类做友元、成员函数做友元,并给出了相应声明格式。

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

目录

友元

全局函数做友元

类做友元

成员函数做友元


友元


    生活中你的家有客厅(Public),有你的卧室(Private)
    客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去
    但是呢,你也可以允许你的好闺蜜好基友进去。

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

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

    友元的关键字为 friend

    友元的三种实现:


全局函数做友元


        声明格式:friend + 全局函数返回值类型 + 全局函数名(全局函数形参);
            示例:

                #include <iostream>
                using namespace std;

                class Budling {
                    friend void goodGay(Budling& b1);    //告诉编译器,这个全局函数可以访问类内的私有内容

                public:
                    Budling()
                    {
                        m_SetingRoom = "客厅";
                        m_BadRoom = "卧室";
                    }

                public:
                    string m_SetingRoom;
                private:
                    string m_BadRoom;

                };

                void goodGay(Budling &b1)
                {
                    cout << "访问" << b1.m_SetingRoom << endl;
                    cout << "访问" << b1.m_BadRoom<< endl;

                }


                void test01()
                {
                    Budling B;
                    goodGay(B);
                }

                int main()
                {
                    test01();

                    system("pause");

                    return 0;
                }

类做友元


        声明格式:friend + class + 类名;
            示例:

                #include <iostream>
                using namespace std;

                class Building {
                    //告诉编译器,这个类可以访问Building这个类中的私有属性
                    friend class goodGay;
                public:
                    Building();
                public:
                    string m_SetingRoom;
                private:
                    string m_BadRoom;
                };

                class goodGay {
                public:
                    goodGay();
                    void vist();
                private:
                    Building *building;
                };

                Building::Building() 
                {
                    m_SetingRoom = "客厅";
                    m_BadRoom = "卧室";
                }

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

                void goodGay::vist()
                {
                    cout << "正在访问:" << building->m_SetingRoom << endl;
                    cout << "正在访问:" << building->m_BadRoom << endl;
                }

                void test01()
                {
                    goodGay G1;
                    G1.vist();
                }

                int main()
                {
                    test01();
                    system("pause");

                    return 0;
                }

成员函数做友元


        声明格式:friend + 成员函数返回值类型 + 成员函数所属类名:: + 成员函数名(成员函数形参)
            示例:

                #include <iostream>
                using namespace std;

                class Building;
                class GoodGay {
                public:
                    GoodGay();
                public:
                    void visit1();
                    void visit2();
                private:
                    Building* m_building;
                };

                class Building {
                    //告诉编译器,允许下面这个成员函数访问当前类的私有属性
                    friend void GoodGay::visit1();
                public:
                    Building();
                public:
                    string m_SetingRoom;
                private:
                    string m_Bedroom;
                };

                Building::Building() 
                {
                    m_SetingRoom = "客厅";
                    m_Bedroom = "卧室";
                }

                GoodGay::GoodGay() 
                {
                    m_building = new Building;
                }

                void GoodGay::visit1()
                {
                    cout << "visit1正在访问" << m_building->m_SetingRoom << endl;
                    cout << "visit1正在访问" << m_building->m_Bedroom << endl;
                }

                void GoodGay::visit2()
                {
                    cout << "visit2正在访问" << m_building->m_SetingRoom << endl;
                    //cout << "visit2正在访问" << m_building->m_Bedroom << endl;
                }

                void test01()
                {
                    GoodGay G1;
                    G1.visit1();
                    G1.visit2();
                }

                int main()
                {
                    test01();

                    system("pause");

                    return 0;
                }

注:学习黑马视频的学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值