“ ... Mark Linton 順便到我的辦公室來了一下,提出了一個使人印象深刻的請求,要求提供第三個控制層次,以便能支持斯坦福大學正在開發的 Interviews 庫中所使用的風格。我們一起揣測,創造出單詞 protected 以表示類裡的一些成員,...”
“... Mark 是 Interviews 的主要設計師。他的有說服力的爭辯是基於實際經驗和來自真實代碼的實例。...”
“...大約五年之後,Mark 在 Interviews 裡禁止了 protected 數據成員,因為它們已經變成許多程序錯誤的根源...”
我不喜歡 protected ,但是今天,我偶爾用一下 C++ 時,不再有那麼多潔癖。反正很難用 C++ 做出穩定的設計,那麼,愛怎麼用就怎麼用吧。關鍵是別用 C++ 做特別核心的東西就成了。
今天,碰到一個跟 protected 有關的問題,小郁悶了一下。覺得可以寫寫。這個倒是個基本問題,貌似以前很熟悉。畢竟很多年不碰了,對 C++ 語法有點生疏。
小時候,我一度以為這樣的代碼是不合法的。
因為我擔心在 foo::foobar 中不能訪問 f 的私有成員變量 a。
後來我明白了,所謂私有,是針對類的,而不是具體的對象。
但是今天碰到另一個問題,讓我愣了一下。
這次,在 foobar::bar 裡,訪問 this 的 a 成員允許,但 f 的 a 成員卻被禁止了。
因為 foo::a 對 foobar 是 protected 的,foobar 的成員函數可以訪問自己的 a ,但是對於 foo 指針,就禁止了。
想了一下,解決方案是。
很壞味道。不過也不太所謂了。