當(dāng)我還在用 C++ 做主要開發(fā)語言的最后幾年,我已經(jīng)不大用 protected 了。從箱底翻出曾經(jīng)鐘愛的一本書:《C++語言的設(shè)計(jì)和演化》,中文版 235 頁這樣記錄:
“ ... Mark Linton 順便到我的辦公室來了一下,提出了一個(gè)使人印象深刻的請(qǐng)求,要求提供第三個(gè)控制層次,以便能支持斯坦福大學(xué)正在開發(fā)的 Interviews 庫中所使用的風(fēng)格。我們一起揣測,創(chuàng)造出單詞 protected 以表示類里的一些成員,...”
“... Mark 是 Interviews 的主要設(shè)計(jì)師。他的有說服力的爭辯是基于實(shí)際經(jīng)驗(yàn)和來自真實(shí)代碼的實(shí)例。...”
“...大約五年之后,Mark 在 Interviews 里禁止了 protected 數(shù)據(jù)成員,因?yàn)樗鼈円呀?jīng)變成許多程序錯(cuò)誤的根源...”
我不喜歡 protected ,但是今天,我偶爾用一下 C++ 時(shí),不再有那么多潔癖。反正很難用 C++ 做出穩(wěn)定的設(shè)計(jì),那么,愛怎么用就怎么用吧。關(guān)鍵是別用 C++ 做特別核心的東西就成了。
今天,碰到一個(gè)跟 protected 有關(guān)的問題,小郁悶了一下。覺得可以寫寫。這個(gè)倒是個(gè)基本問題,貌似以前很熟悉。畢竟很多年不碰了,對(duì) C++ 語法有點(diǎn)生疏。
小時(shí)候,我一度以為這樣的代碼是不合法的。
因?yàn)槲覔?dān)心在 foo::foobar 中不能訪問 f 的私有成員變量 a。
后來我明白了,所謂私有,是針對(duì)類的,而不是具體的對(duì)象。
但是今天碰到另一個(gè)問題,讓我愣了一下。
這次,在 foobar::bar 里,訪問 this 的 a 成員允許,但 f 的 a 成員卻被禁止了。
因?yàn)?foo::a 對(duì) foobar 是 protected 的,foobar 的成員函數(shù)可以訪問自己的 a ,但是對(duì)于 foo 指針,就禁止了。
想了一下,解決方案是。
很壞味道。不過也不太所謂了。
新聞熱點(diǎn)
疑難解答