【C++ 07】类和对象-友元

    技术2022-07-12  74

    目录

    1 全局函数做友元

    2 类做友元

    3 成员函数做友元


    在程序中有些私有属性,也想让类外特殊的一些函数或者类进行访问,这就需要用到友元技术,友元的目的就是让一个函数或者类访问另外一个类中的私有成员。

    友元的关键字为friend

    友元的三种实现方式:

    全局函数做友元类做友元成员函数做友元

    1 全局函数做友元

    class Building { //goodGay全局函数是Building的好朋友,可以访问Building 中的私有成员 friend void goodGay(Building* building); public: Building() { m_SittingRoom = "keting"; m_Bedroom = "woshi"; } public: string m_SittingRoom; private: string m_Bedroom; }; //全局函数 void goodGay(Building *building) { cout << "好基友全局函数 正在访问" << building->m_SittingRoom << endl; cout << "好基友全局函数 正在访问" << building->m_Bedroom << endl; }

    2 类做友元

    class Building { friend class GoodGay; public: Building(); public: string m_SittingRoom; private: string m_BadRoom; }; //类外写成员函数 Building::Building() { m_SittingRoom = "客厅"; m_BadRoom = "卧室"; } class GoodGay { public: GoodGay(); public: void visit();//参观函数,访问Building中的属性; Building* building; }; GoodGay::GoodGay() { building = new Building; } void GoodGay::visit() { cout << "好基友正在访问你的" << building->m_SittingRoom << endl; cout << "好基友正在访问你的" << building->m_BadRoom << endl; } void test01() { GoodGay gg; gg.visit(); } int main() { test01(); system("pause"); return 0; }

    3 成员函数做友元

    class Building; class GoodGay { public: GoodGay(); public: void visit();//参观函数,访问Building中的属性; void visit1(); Building* building; }; class Building { friend void GoodGay::visit(); public: Building(); public: string m_SittingRoom; private: string m_BadRoom; }; Building::Building() { m_SittingRoom = "客厅"; m_BadRoom = "卧室"; } GoodGay::GoodGay() { building = new Building; } void GoodGay::visit() { cout << "好基友正在访问你的" << building->m_SittingRoom << endl; cout << "好基友正在访问你的" << building->m_BadRoom << endl; } void GoodGay::visit1() { cout << "好基友正在访问你的" << building->m_SittingRoom << endl; //cout << "好基友正在访问你的" << building->m_BadRoom << endl; }

    Building的顺序很重要,需要先声明Building,再定义GoodGay

    Processed: 0.012, SQL: 10