C++有一個很有趣的語法:Friend Function/Class

 

A friend function of a class is not a member function of the class

but it has access to the private members of that class(to both private

member variables and private member functions) just as a member

fubction does.

-bsolute C++,Sixth Edition,Walter Savitch,Page 372

也就是說你在class裡面宣告了一個friend function 也就代表有一個function

本身雖然不是class的成員,但卻能操作class裡面的private的變數和method

 

若用現實生活中的朋友(friend)的觀點來看,若你和某人是朋友

你會願意分享你不會向陌生人分享的事情

在C++裡面的Friend Function/Class也是這個概念

既然我宣告你是我的朋友,那麼我就願意分享我的私有成員和函數讓你使用

但我們先不談Friend Function/Class破壞了封裝性這回事

 

上課的時候,我記得老師是這樣跟我們說的...

在現實生活中,朋友是雙向的(很直覺,也本該如此)

你若和某人是朋友,朋友之間是互相分享的

如果他能從你口袋掏錢,那麼你也可以從他口袋掏錢(這是老師上課舉的例子...)

但是在C++裡面的Friend Function/Class的朋友是"單向的"

 

若以下面這一個friend class的例子來看

class F; // forward declaration

 

class C

{

public:

         . . .

     friend class F;

         . . .

} ;

class F

{

     . . .

};

 

class C 宣告了class F是他的朋友

所以class F可以分享class C的私有成員和函數

但是class C不能使用class F的私有成員和函數

因為在class F中並沒有宣告class C是他的朋友

 

其實...聽到這裡我的內心獨白是

現實生活中常常也是如此阿!!!!

你若真心對待一個朋友,在你的內心宣告了他是你的朋友,他可以從你這裡分享你的東西

但是往往對方根本在他的心裡沒有宣告你是他的朋友阿...

真心對待未必能夠換得同等的回報這也是現實生活中常有的事情阿!!!

 

其實啊!我這個人對待朋友都是用真心對待

但是我常常發現這是"單向的"

我會給對方很多次機會,這段期間也是我在觀察這個人是否真的能讓我當作朋友對待很關鍵的時期

常常到最後我發現這個人讓我很失望,不值得我付出真心對待時

在我的心裡我對他的宣告不是註解掉這麼簡單而已,而是直接砍掉

我大概也不會和他撕破臉,就和往常一般地和他來往

但打從心底我也認定我不會再對他付出真心

 

C++這個語法真的太有趣了,在其他程式語言Java、C#...都沒有這種語法

很了不起的是,C++把人性表現在語法上

今天學到這語法時,令我有感而發阿...

 

arrow
arrow
    創作者介紹
    創作者 Mark Zhang 的頭像
    Mark Zhang

    讀處

    Mark Zhang 發表在 痞客邦 留言(3) 人氣()