把 c++ 想象**類社會。
訪問許可權、繼承、友元將無比真實的反應人類社會中的種種關係。
一、類內部訪問許可權
+
----
-----+
|class|--
> 人+--
-------
+|public|--
> 你能幹啥
|protected|--
> 你留下啥
|private|--
> 你藏了啥+--
-------
+|friend |
--> 你的圈子+--
-------
+
幾乎所有人都知道你能幹啥,這某種程度上是你在這個社會的價值體現。但這些不相干的人,並不知道你留下了啥,是萬貫家財?還是詩書傳承?誰知道?你的家人知道(類內部),你的後代知道(子類),你的朋友知道(友元)。至於你藏了些啥,除了你的家人(類內部),可能也只有幾位密友(友元)了解。
+
----
-----+
|inherits |
--> 繁衍後代+--
-------
+|public|--
> 嫡出
|protected|--
> 庶出
|private|--
> 私生+--
-------
+
c++ 的社會沒有計畫生育,也似乎沒有限制一夫一妻。所以就存在正房和偏房的問題,嫡長子光明正大(public)的繼承了你的財產和光環(public, protected)。其餘庶出(protected)的就沒那麼好運了,僅僅能夠分到一點財產(protected, protected)。而風流快活的產物——私生子(private)更是可憐,分到的東西誰也說不得,是私密。
class
base
;class
sneaky
:public base
friend void
clobber
(base &b)
// error
int j;
};
prot_mem 是 base 的 protected 成員。那麼對於 以 public 的姿勢繼承 base 的子類 sneaky 來說,它可以取得該成員(嫡長子)。
而第乙個 clobber 作為 sneaky 的密友,自然也可以取得 sneaky 的成員,如其自己的 j,以及繼承自父類的 prot_mem。
第二個 clobber 作為 sneaky 的密友,卻妄想去直接拿其父親留下的 prot_mem,這顯然是不合理的。 注意這裡與上面那個的區別,該密友越過了 sneaky,直接去拿其父親的遺物,這是違背了社會法規的。
從上面的一些例子,可以很明顯的看到私生子的慘狀,只要私生,祖上的一切接變成 private,幾乎沒法再傳承下去。
幸好 c++ 的社會裡倒也公平,提供了乙個 using 關鍵字,讓私生子也有了逆襲的機會。如下例
#include
class
base
protected
: std:
:size_t n;};
class
derived
:private base
;
所謂私生子的 derived,原本 size 和 n 都是私有成員,經過 using 宣告後,前者為 public,後者為 protected。逆襲成功。 社會結構的要素
1977年出版的克里斯多福.亞歷山卓 christopher alexander 所著的 建築模式語言 中,收錄了世界上各種文明中幾個世紀的人類建築智慧型。它不僅在建築學以及城市規劃上意義深遠,並且且在軟體設計領域影響巨大。書中,亞歷山卓與他的合著者共 了253個建築設計模式。例如 203 孩子們的...
美國社會的自信
記得剛到美國時,去買食品,光啤酒就有十幾個牌子,有的牌子還分幹啤 冰啤 輕 啤,過去我習慣了沒有太多選擇的社會,從那時起我不得不開始做出乙個又乙個的 選擇。生活中,美國社會給了我多一些的選擇,也給了我多一些的責任,多一些的自信。來美國的有些亞洲新貴們,很快就發現他們身邊少了乙份熟悉的羨慕,便多了乙份...
檔案寄生 寄生蟲自體繁衍的道路
傳送門 首先來解答一下很多人問得問題 這個ntfs資料流檔案,也叫alternate data streams,簡稱ads,是ntfs檔案系統的乙個特性之一,允許單獨的資料流檔案存在,同時也允許乙個檔案附著多個資料流,即除了主檔案流之外還允許許多非主檔案流寄生在主檔案流之中,它使用資源派生的方式來維...