熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

初學者編程入門:學習C++的最大難度

2013-11-13 10:05:23  來源: .NET編程 
困難度之一

C++ 是個難學易用的語言這句話相信很多人都心有戚戚C++的學習難度一在於語言本身太多的另一個就在於 paradigm shift (思考模式的移轉)

傳統語言如 C Pascal Basic Fortran除了模樣看起來稍有不同基本上都是函式 call 來 call 去大同小異很容易掌握你想做的動作在 code 中都看得一清二楚你所看不到的也不過就是編譯器為你的函式加上用以處理堆疊的一小段碼(prologue 和 epilogue)這一小段碼基本上做的是 housekeeping 工作你沒看到也沒有關系並不影響你對程式邏輯的思考

C++ 不一樣C++ 有太多和程式邏輯息息相關的動作是編譯器為我們加上去的換句話說 C++ 編譯器為我們加碼如果不識清這一節學習C++ 有如霧裡看花霧非霧花非花

編譯器為我們的 C++ 程式加了什麼碼呢?很多!物件誕生時 ctor 會被喚起物件死亡時 dtor 會被喚起這都是加碼的結果ctor 中設定vtpr 和 vtbl這也是加碼的結果new 單一物件時會產生 memory block cookienew 物件陣列時會產生一個內部結構記錄著 object size 和 class ctor這也都是布幕後的工作可以說程式碼中看不到而卻必須完成的所有與程式邏輯有關的動作統統都是 C++ 編譯器加碼後的結果

繼承發生整個情況變得稍微復雜起來多重繼承又更復雜一些虛擬繼承又再更復雜一些

這些布幕後的主題統可歸類為所謂的 C++ object model(物件模型)如果不知道這些底層機制你就只能夠把 make destructors virtual in base classesnever treat arrays polymorphically這類規則硬背下來卻不明白它的道理用一樣東西卻不明白它的道理林語堂如是說不高明只知道 how不知道 why

困難度之二

C++ 的第二個學習難度在於 paradigm shift(思考模式的移轉)別說自己設計classes 了光使用別人的classes就都是一種思考模式和行為模式的移轉MFC(或 OWL 或 VCL)programmer 必然能夠領略並體會其中的意思

使用所謂的 application framework(一種大型的凝聚性強的有著物件導向公共基礎建設的 class library)你的碼和 framework 之間究竟是怎樣的關系呢?framework 提供的一大堆可改寫的虛擬函式的意義與價值究竟在哪裡呢?為什麼 framework 所設計的種種美好性質以及各式各樣的演算法竟然可以施行於我們自己設計的 class types 身上呢?framework 被設計時也並不知道我們的存在這正是物件導向中的多型(polymorphism)的威力

稍早所說的 C++ 物件模型偏屬程式設計的低層面這裡所說的思考模式移轉則是程式設計的高層面能夠把新思維模式的威力發揮得最淋漓盡致的當推物件導向的 polymorphism(多型)和 generalization(泛型)如果你沒有使用這兩項特性等於入 C++ 寶山卻空手而歸

反覆磨煉循環震蕩

想像 C++ 是一把用來解決程式問題的刀要它堅轫要它鋒利就必須經過多次的回火在高熱和驟冷之間——煉

初學 C++ 語法(syntax)之後你應該盡快嘗試體驗 polymorphism(大致而言也就是虛擬函式的運用)等到對 OOP 的精神有了大局掌控的能力但對 C++ 的許多小細節不甚清楚就是回到C++ 物件模型 煉的時機

成長是在高階(polymorphism)和低階(object model)之間反覆震蕩才能夠震蕩到更高的位階而不是平平庸庸於中階(C++ syntax)的一灘死水
From:http://tw.wingwit.com/Article/program/net/201311/12530.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.