C++从0到1的入门级教学(十一)——友元
生活随笔
收集整理的這篇文章主要介紹了
C++从0到1的入门级教学(十一)——友元
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 11 友元
- 11.1 全局函數做友元
- 11.2 友元類
- 11.3 成員函數做友元
11 友元
讓我們引入一個例子來講述友元是什么。
生活中你的家有客廳,有臥室,客廳所有來的客人都可以進去,但是你的臥室是私有的。對于認識的人來說你可以允許它進去,但是對于陌生人你就不是很歡迎了。
同樣地,我們把這個例子引申到類上,那么我們的友元就變成了,一個類允許另外一個類擁有訪問自己的私有權限。
如果要指定友元類,只需加上關鍵字friend。我們來看一下它的三種實現方式:
- 全局函數做友元
- 類做友元
- 成員函數做友元
11.1 全局函數做友元
讓我們看一下全局函數做友元的簡單用法:
#include <iostream> using namespace std; #include <string>class Building {friend void goodGay(Building& building);//!儂,指定這個函數為Building的好朋友 public:Building(){m_SittingRoom = "客廳";m_Bedroom = "臥室";};string m_SittingRoom;private:string m_Bedroom; };//全局函數 void goodGay(Building &building) {cout << "友元全局函數正在訪問:" << building.m_SittingRoom << endl;cout << "友元全局函數正在訪問:" << building.m_Bedroom << endl; }void test01() {Building building;goodGay(building); }int main() {test01(); }out:
11.2 友元類
讓我們在來看看友元類是怎么一回事,這個實際上不必多說,只要你試著敲一下下面的代碼,即可體會其思想。
#include <iostream> using namespace std; #include <string>class Building;class GoodGay { public:GoodGay();void visit();//參觀函數 訪問Building中的屬性Building* building; };class Building {friend class GoodGay; public:Building();string m_SittingRoom;private:string m_BedRoom; //臥室 };Building::Building() {m_SittingRoom = "客廳";m_BedRoom = "臥室"; }GoodGay::GoodGay() {//創建建筑物對象building = new Building; }void GoodGay::visit() {cout << "友元類正在訪問:" << building->m_SittingRoom << endl;cout << "友元類正在訪問:" << building->m_BedRoom << endl; }void test01() {GoodGay gg;gg.visit(); }int main() {test01(); }out:
11.3 成員函數做友元
同樣地,成員函數做友元和類做友元也是大同小異,如下所示:
#include <iostream> using namespace std;class Building;class GoodGay { public:GoodGay();void visit1();//這個函數可以訪問Building的私有成員void visit2();//這個函數不可以訪問Building的私有成員Building* building; };class Building {friend void GoodGay::visit1(); public:Building();string m_SittingRoom;//客廳private:string m_BedRoom;//臥室 };//類外實現成員函數 Building::Building() {m_SittingRoom = "客廳";m_BedRoom = "臥室"; }GoodGay::GoodGay() {building = new Building; }void GoodGay::visit1() {cout << "visit1 函數正在訪問:" << building->m_BedRoom << endl;cout << "visit1 函數正在訪問:" << building->m_SittingRoom << endl; };void GoodGay::visit2() {// cout << "visit2 函數正在訪問:" << building->m_BedRoom << endl;cout << "visit2 函數正在訪問:" << building->m_SittingRoom << endl; };void test01() {GoodGay gg;gg.visit1();gg.visit2(); }int main() {test01(); }out:
總結
以上是生活随笔為你收集整理的C++从0到1的入门级教学(十一)——友元的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大华存储服务器系统,大华重磅推出64盘位
- 下一篇: 把cpp编译为so_基于VSCode和C