閱讀本章讓我想起一個笑話:寫 Hello World 程式,隨著水平職務不同,程式碼隨之變化。初看當笑話,細品作者水平不凡。要讓程式碼最大程度適應不同執行環境、最大程度復用,設計編寫過程需考量許多問題,代碼不再具備 C 的簡潔高效,犧牲這些換來更好的封裝。當然只是列印 Hello World 無需如此。
用 C++ 思維解決問題,對熟悉 C 的人極不適應,需時間轉型。否則寫出的代碼似是而非,且不能邯鄲學步,必須從思想徹底 C++(OO)。若只依葫蘆畫瓢,結果是用 C++ 語法寫 C 式程式。
典型低級錯誤:類別無限制擴充,完全未考慮多層結構(基底/派生類別),需要屬性方法就往類別塞。雖用到多型、多載等 OO 技巧,但最後類別龐大無比,除在當前系統任勞任怨外,**零復用可能**。另一系統需類似功能只能重寫。最致命:維護更新極痛苦,頻繁全量編譯、閱讀理解極難。既失 C 簡潔高效,又不具完整 C++ OO 特性。**這根本不能叫 C++ 程式。**
C 與 C++ 在編程思想上**相互矛盾**。想學 C++ 完全可不學 C,只需好書、不太笨的腦袋加努力。若已有 C 經驗,某種程度上反而會攪局。
選擇 C++ 而非 C,編程思想必須轉為 C++,擺脫 C 程序使用全域資料慣性,才能發揮 C++ 物件模型威力。
static、nonstaticstatic、nonstatic、virtualnonstatic 資料成員置於**類別物件內部**static 資料成員置於**類別物件外部**static/nonstatic 成員函式置於**類別物件外部**virtual 函式由物件的 vptr(指向 vtbl 虛函式表指標)支援vptr 設定/重置由建構函式、解構函式、copy assignment 運算子自動完成(本筆記分多次撰寫,第一章後半可能再拖 10 天半月。寧願先發一部分,負責任態度再讀三遍消化。發現自己 C++ 還差很遠,好可怕。)