在這章中,我們一直保持你的私人資料傳的美德。然而,你可能偶爾會發現的情況下,你會發現你的類和函式,需要非常密切的工作。例如,你可能有乙個類儲存資料,和乙個函式(或另一類),資料顯示在螢幕上。雖然類儲存和顯示的**已經分離更容易維護,顯示**確實是密切相關的儲存類的細節。因此,沒有太多的顯示**隱藏儲存類細節增益。
在這種情況下,有兩個選項:
1)有顯示**使用公開**功能的儲存類。然而,這有幾個潛在的負面影響。首先,這些公共成員函式必須定義,這需要時間,而且可以弄亂的儲存類的介面。第二,儲存類可能暴露的功能顯示的**,它並不真的想讓別人。有沒有辦法說「這個函式是用來由顯示類」。
2)或者,使用友元類和友元函式,你可以給你的顯示**訪問的儲存類的私人細節。這讓顯示**直接訪問所有的儲存類的私有成員和函式!在本課中,我們將採取仔細看看這是怎麼做的。
友元函式
這是使用友元函式的乙個例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class
accumulator
void
add(
int
nvalue)
// make the reset() function a friend of this class
friend
void
reset(accumulator &caccumulator);
};
// reset() is now a friend of the accumulator class
void
reset(accumulator &caccumulator)
在這個例子中,我們已經宣告了乙個函式名為reset()以類蓄電池的物件,並設定為0 m_nvalue價值。因為reset()不是蓄能器類的乙個成員,通常reset()不能訪問私有成員的蓄電池。然而,由於蓄電池已明確宣布這reset()函式是類的乙個朋友,這個reset()函式給出了蓄能器的私有成員的訪問。
請注意,我們必須通過蓄能器物件reset()。這是因為reset()不是乙個成員函式。它沒有這個指標,也不會有乙個蓄能器物件的工作,除非得到乙個。
雖然這個例子很做作,這裡的另乙個例子就是一些你會看到在不久的將來再次接近了許多,當我們談論操作符過載:
1
2
3
4
5
6
7
8
9
10
11
12
13
class
value
friend
bool
isequal(
const
value &cvalue1,
const
value &cvalue2);
};
bool
isequal(
const
value &cvalue1,
const
value &cvalue2)
C 類與細節
讀書筆記 增加中 1.vector 和string c 標準定義了兩個類vector和string,vector和string類將陣列和字串作為基本類來處理,vector有確定的大小,兩個string物件可以用 和 等進行比較,兩者都可以用 進行複製。例子 使用vector類儲存100個平方值並將基...
String類的細節
一 tab和空格替換 封裝checkutil時,為了避免字串中間有空格,比如 zhang san 所以我用如下正則替換,str.replace 然後寫測試類,只能字母加數字 param str return public static boolean isalphabetandnum string ...
python 類的細節
下面我根據mark lutz的 learning python 中的 大師眼中的oop 列一些使用oop的常見原因。此外,對於python2來說,還有乙個叫做 新式類 new style 的東西,這個對應於前面講過的類,那麼前面講過的類就稱為 經典 classic 類。但是,對於python3來講,...