C++之友元
阿新 • • 發佈:2020-10-26
友元
類裡面的私有屬性,可以讓類外一些特殊的函式或者類進行訪問
關鍵字:friend
友元三種實現:
- 全域性函式做友元
- 類做友元
- 成員函式做友元
成員函式為友元
#include <iostream> using namespace std; #include <string> class Building { //告訴編譯器,goodGay是全域性函式,是BUIling類的好朋友,可以訪問私有 friend void goodGay(Building *building); public: Building(){ m_SittingRoom = "客廳"; m_BedRoom = "臥室"; } string m_SittingRoom; private: string m_BedRoom; }; void goodGay(Building *building){ cout<< building->m_SittingRoom <<building->m_BedRoom << endl; } void test01(){ Building b; goodGay(&b); } int main(){ test01(); return 0; }
類做友元
#include <iostream> using namespace std; #include <string> class Building{ //告訴編譯器,goodgay類是building類的好朋友,可以訪問裡面的私有內容 friend class Goodgay; public: Building(); public: string m_Sit; private: string m_Bed; }; class Goodgay{ public: Goodgay(); void visit(); private: Building *building; }; //建構函式無需返回值,直接在前面加上作用域 Building ::Building() { m_Sit = "客廳"; m_Bed = "臥室"; } Goodgay ::Goodgay() { building = new Building;//宣告物件僅定義,需要給另一個類一個空間 } //在返回值後面加上作用域 void Goodgay::visit() { cout<<building->m_Sit<<building->m_Bed<<endl; } void test(){ Goodgay gg; gg.visit(); } int main(){ test(); return 0; }
成員函式做友元
#include <iostream> using namespace std; #include <string> class Building; class Goodgay{ public: Goodgay(); void visit();//讓visit可以訪問builing中私有成員 void visit2();//不可以訪問 private: //用到該類,必須在其前面宣告類,可以虛假宣告class Building Building *building;//私有部分可以用visit同類訪問 }; class Building{ //告訴編譯器,goodgay類下的visit成員函式是該類的好朋友,可以訪問裡面的私有內容 friend void Goodgay::visit();//用到該類,必須在其前面宣告類,可以虛假宣告class Goodgay; public: Building(); public: string m_Sit; private: string m_Bed; }; //建構函式無需返回值,直接在前面加上作用域 Building ::Building() { m_Sit = "客廳"; m_Bed = "臥室"; } Goodgay ::Goodgay() { building = new Building; } //在返回值後面加上作用域 void Goodgay::visit() { cout<<building->m_Sit<<building->m_Bed<<endl; } void Goodgay::visit2() { cout<<building->m_Sit<<endl; } void test(){ Goodgay gg; gg.visit(); gg.visit2(); } int main(){ test(); return 0; }