C 的社會繁衍

2021-09-27 02:23:29 字數 1756 閱讀 6749

把 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檔案系統的乙個特性之一,允許單獨的資料流檔案存在,同時也允許乙個檔案附著多個資料流,即除了主檔案流之外還允許許多非主檔案流寄生在主檔案流之中,它使用資源派生的方式來維...