關於C 友元的一些思考

2021-05-25 05:22:46 字數 725 閱讀 5245

友元在c++裡面是乙個比較重要的東西,對於類裡面宣告的私有資料與函式,如果在某些應用需求下需要被其他函式呼叫,這時候就需要使用友元函式。就好像給了乙個宣告,說某某函式是我這個類的乙個好朋友,你們可以大膽地放他進入我的閨房,訪問我的資料。

在c++裡面,我們定義友元是使用friend 這個關鍵字。宣告友元函式可以有下面四種情況。

friend void h(); 宣告的友元函式是乙個全域性函式,這裡其實做了兩件事,一件事宣告乙個函式 void h();,另一件事是宣告該函式屬於x類的乙個友元函式。

friend class z 宣告類z是友元類,即類z裡面所有方法都可以引用a中的私有資料與私有函式。

friend void g(x*, int) 這個是比較常用的方式,跟上面的全域性函式是一樣的。

要強調的是friend y::f(x*); 制定在類y裡面的特定函式為友元。這裡有乙個問題要注意到,就是宣告的順序。在宣告友元函式之前必然是要求先宣告類y以及類y裡面的f()方法,不然系統是找不到對應的類。然後由於類y裡面有類x作為引數,也必然需要在宣告函式f()之前先有類x的宣告。這無疑是乙個很大的矛盾。如何解決這個矛盾呢,是有技巧的。

如上面**所示,我們在宣告f(x*)之前有了類x的乙個宣告,這裡僅僅是宣告,並沒有定義。在宣告友元之前也有類y的乙個宣告,這就圓了場。然而也要注意到,這裡有乙個細節,f(x*)的引數是乙個指標。由於在類y前面類x只是乙個宣告,但是對於類x的大小,在掃瞄到類y時是未知的,所以只能傳入乙個指標來解決這個衝突。

關於C 友元的一些思考

友元在c 裡面是乙個比較重要的東西,對於類裡面宣告的私有資料與函式,如果在某些應用需求下需要被其他函式呼叫,這時候就需要使用友元函式。就好像給了乙個宣告,說某某函式是我這個類的乙個好朋友,你們可以大膽地放他進入我的閨房,訪問我的資料。在c 裡面,我們定義友元是使用friend 這個關鍵字。宣告友元函...

C 關於友元的一些程式

一 友元函式 include using namespace std class country class internet friend void show internet obj show can access private parts of class internet friend v...

關於SpringIOC的一些思考

ioc是 依賴倒置原則 的乙個特例,說其是特例,就是說其具有 依賴倒置原則 的性質。依賴倒置原則強調的兩點是 上層模組和下次模組都依賴於抽象,二者之間通過這種抽象的東西聯絡在一起 具體可以依賴於抽象,而抽象不能依賴於具體。我認為spring提倡的 基於介面程式設計 就是為了遵循 依賴倒置原則 其中所...