這些布幕后的主題,統(tǒng)可歸類為所謂的 C++ object model(物件模型)。假如不知道這些底層機制,你就只能夠把 "make destrUCtors virtual in base classes"或 "never treat arrays polymorphically"這類規(guī)則硬背下來,卻不明白它的道理。用一樣東西,卻不明白它的道理,林語堂如是說:“不高明”。只知道 how,不知道 why。
困難度之二
C++ 的第二個學習難度在于 "paradigm shift"(思考模式的移轉(zhuǎn))。別說自己設計classes 了,光使用別人的classes,就都是一種思考模式和行為模式的移轉(zhuǎn)。MFC(或 OWL 或 VCL)programmer 必然能夠領略并體會其中的意思。
使用所謂的 application framework(一種大型的、凝聚性強的、有著物件導向公共基礎建設的 class library),你的碼和 framework 之間究竟是怎樣的關系呢?framework 提供的一大堆可改寫的虛擬函式的意義與價值究竟在哪里呢?為什么 framework 所設計的種種美好性質(zhì)以及各式各樣的演算法竟然可以施行于我們自己設計的 class types 身上呢?framework 被設計時,也并不知道我們的存在。這正是物件導向中的多型(polymorphism)的威力。
稍早所說的 C++ 物件模型,偏屬程式設計的低層面;這里所說的思考模式移轉(zhuǎn),則是程式設計的高層面。能夠把新思維模式的威力發(fā)揮得最淋漓盡致的,當推物件導向的 polymorphism(多型)和 generalization(泛型)。假如你沒有使用這兩項特性,等于入 C++ 寶山卻空手而歸。
反覆磨煉,循環(huán)震蕩
想像 C++ 是一把用來解決程式問題的刀,要它堅軔,要它鋒利,就必須經(jīng)過多次的回火,在高熱和驟冷之間——煉。
初學 C++ 語法(syntax)之后,你應該盡快嘗試體驗 polymorphism(大致而言也就是虛擬函式的運用)。等到對 OOP 的精神有了大局掌控的能力,但對 C++ 的許多小細節(jié)不甚清楚,就是回到C++ 物件模型 煉的時機。