国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深度探索C++對象模型(1)

2019-11-17 05:13:14
字體:
來源:轉載
供稿:網友

  第一章:關于對象(Object Lessons)
   讀完這一章使我想到了一個很久以前看到的一個笑話,編寫一個HELLO WORLD的程序,隨著水平和職務的不一樣,程序代碼也隨著變化。當初看時完全當作笑話來看,現在看來寫此笑話的人水平不一般。假如要使你的代碼能夠最大限度的適應不同的運行環境,和最大限度的復用,則在設計和編寫的過程中需要考慮的問題很多,因此代碼已變的不在具有C語言的簡潔,高效。而犧牲了這些優勢換來的是更好的封裝。當然假如你只是要打印Hello World則不必這樣做了。

   以C++的思維方式解決問題,對于對C語言已經很熟悉的人來說會很不能適應。需要一段時間來適應,不然會將代碼寫的似是而非。而且不能邯鄲學步,必須從思想上徹底的C++(OO),假如只是依葫蘆畫瓢,那結果很可能是用C++的語法編寫C式的程序。本人曾經犯的典型的低級的錯誤之一,就是無意識的一個類無限制的擴充,完全沒有考慮到類的多層結構(基類-派生類),需要屬性或方法便在類中增加,雖然也用到了多態、重載等一些OO的設計方式,但最后這個類龐大無比,除了在當前系統中任勞任怨的工作外,一點復用的可能都沒有,假如另一個系統還需要一個類似的東西,那只能重新設計實現一個新的類。并且最致命的是在維護更新時帶來得麻煩,需要不斷全部編譯不說,而且代碼在用了大量注釋后,在過一段時間讀起來也是一件重腦力勞動。及失去了C的簡潔清楚和高效,也不完全具備C++的面向對象的特性。這根本不能叫C++程序。(我想有時間重寫一下以前代碼也會有很多收獲,溫故而知新嗎)C和C++在編程思想上是相互矛盾的。這也就是說假如你想學C++,完全可以不學C,只需要一本好書和一個不太笨的大腦再加上努力就可以了,假如你已有C的經驗在一定的情況下反而會搗亂。

   本章是對對象模型的一個大略瀏覽。既然我們選擇了C++而不是C作為開發工具,那我們的編程思想也應該轉為C++的,而不能再延續C的PRocedural方式。我們必須學會C++的思考方式。采用抽象數據類型或用一個多層的class體系對數據以及數據處理函數進行封裝,只有擺脫C程序的使用全局數據的慣性,才能充分發揮出C++對象模型的強大威力。

   在C++中有兩種數據成員static和nonstatic,以及三種成員函數static、nonstatic和virtual。C++對象模型對內存空間和存取時間做了優化,nonstatic的數據成員被置于類對象之內,而static數據成員被置于類對象之外。static和nonstatic成員函數被放在類對象之外。而virtual函數是由類對象的一個指向vtbl(虛函數表)的指針vptr來進行支持。而vptr的設定和重置由類的構造函數、析構函數以及copy assignment運算符自動完成。

   我們設計的每一個類幾乎都要有一個或多個構造函數、析構函數和一個Assignment運算符。他們的作用是構造函數產生一個新的對象并確定它被初始化。析構函數銷毀一個對象并確定它已經被適當的清理(避免出現內存泄露的問題),Assignment運算符給對象一個新值。

   這是第一章的第一部分,由于雷神最近幾天在做模式小組的主頁,時間周轉不開了。本想寫完整個一章再發,考慮一下還是先發一部分吧。原因有2。1、第一章的后半部可能又要拖上10天半個月的。2、筆記實在難寫,我不愿意將筆記做成將書上的重點再抄一邊,而是喜歡盡量將自己的理解描述出來,誰知第一章便如此的難以消化,已經反復讀了3遍,還是有些夾生。所以本著對大家和自己負責的態度,雷神預備再看它3遍在說。忽然發現自己的C++還差的很遠,好可怕呀。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋城| 诸暨市| 宣化县| 仁怀市| 女性| 门源| 达州市| 宝应县| 壤塘县| 贵德县| 玛纳斯县| 梅河口市| 肥东县| 临汾市| 浑源县| 克什克腾旗| 广宁县| 井冈山市| 河南省| 桐梓县| 河西区| 城固县| 临邑县| 南宫市| 寿光市| 中方县| 台江县| 比如县| 彰化县| 曲周县| 布拖县| 商洛市| 海南省| 石阡县| 临洮县| 台北县| 景德镇市| 宁强县| 文安县| 和静县| 长阳|