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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

學(xué)習(xí)C++的最大難度是什么?

2019-11-17 05:09:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  困難度之一

  “C++ 是個(gè)難學(xué)易用的語(yǔ)言”,這句話相信很多人都心有戚戚。C++的學(xué)習(xí)難度,一在于語(yǔ)言本身太多的“幕”,另一個(gè)就在于 "paradigm shift" (思考模式的移轉(zhuǎn))。

  傳統(tǒng)語(yǔ)言如 C, Pascal, Basic, Fortran...,除了模樣看起來(lái)稍有不同,基本上都是函式 call 來(lái) call 去,大同小異,很輕易把握。你想做的動(dòng)作,在 code 中都看得一清二楚。你所看不到的,也不過(guò)就是編譯器為你的函式加上用以處理堆疊的一小段碼(PRologue 和 epilogue),這一小段碼基本上做的是 housekeeping 工作,你沒(méi)看到也沒(méi)有關(guān)系,并不影響你對(duì)程式邏輯的思考。

  C++ 不一樣,C++ 有太多和程式邏輯息息相關(guān)的動(dòng)作是編譯器為我們加上去的。換句話說(shuō) C++ 編譯器為我們“加碼”。假如不識(shí)清這一節(jié),學(xué)習(xí)C++ 有如霧里看花,霧非霧,花非花。

  編譯器為我們的 C++ 程式加了什么碼呢?很多!物件誕生時(shí) ctor 會(huì)被喚起,物件死亡時(shí) dtor 會(huì)被喚起,這都是加碼的結(jié)果。ctor 中設(shè)定vtpr 和 vtbl,這也是加碼的結(jié)果。new 單一物件時(shí)會(huì)產(chǎn)生 memory block cookie,new 物件陣列時(shí)會(huì)產(chǎn)生一個(gè)內(nèi)部結(jié)構(gòu)記錄著 object size 和 class ctor...,這也都是布幕后的工作??梢哉f(shuō),程式碼中看不到而卻必須完成的所有與程式邏輯有關(guān)的動(dòng)作,統(tǒng)統(tǒng)都是 C++ 編譯器加碼后的結(jié)果。

  當(dāng)“繼續(xù)”發(fā)生,整個(gè)情況變得稍微復(fù)雜起來(lái)。“多重繼續(xù)”又更復(fù)雜一些,“虛擬繼續(xù)”又再更復(fù)雜一些。

  這些布幕后的主題,統(tǒng)可歸類(lèi)為所謂的 C++ object model(物件模型)。假如不知道這些底層機(jī)制,你就只能夠把 "make destrUCtors virtual in base classes"或 "never treat arrays polymorphically"這類(lèi)規(guī)則硬背下來(lái),卻不明白它的道理。用一樣?xùn)|西,卻不明白它的道理,林語(yǔ)堂如是說(shuō):“不高明”。只知道 how,不知道 why。

  困難度之二

  C++ 的第二個(gè)學(xué)習(xí)難度在于 "paradigm shift"(思考模式的移轉(zhuǎn))。別說(shuō)自己設(shè)計(jì)classes 了,光使用別人的classes,就都是一種思考模式和行為模式的移轉(zhuǎn)。MFC(或 OWL 或 VCL)programmer 必然能夠領(lǐng)略并體會(huì)其中的意思。

  使用所謂的 application framework(一種大型的、凝聚性強(qiáng)的、有著物件導(dǎo)向公共基礎(chǔ)建設(shè)的 class library),你的碼和 framework 之間究竟是怎樣的關(guān)系呢?framework 提供的一大堆可改寫(xiě)的虛擬函式的意義與價(jià)值究竟在哪里呢?為什么 framework 所設(shè)計(jì)的種種美好性質(zhì)以及各式各樣的演算法竟然可以施行于我們自己設(shè)計(jì)的 class types 身上呢?framework 被設(shè)計(jì)時(shí),也并不知道我們的存在。這正是物件導(dǎo)向中的多型(polymorphism)的威力。

  稍早所說(shuō)的 C++ 物件模型,偏屬程式設(shè)計(jì)的低層面;這里所說(shuō)的思考模式移轉(zhuǎn),則是程式設(shè)計(jì)的高層面。能夠把新思維模式的威力發(fā)揮得最淋漓盡致的,當(dāng)推物件導(dǎo)向的 polymorphism(多型)和 generalization(泛型)。假如你沒(méi)有使用這兩項(xiàng)特性,等于入 C++ 寶山卻空手而歸。

  反覆磨煉,循環(huán)震蕩

  想像 C++ 是一把用來(lái)解決程式問(wèn)題的刀,要它堅(jiān)軔,要它鋒利,就必須經(jīng)過(guò)多次的回火,在高熱和驟冷之間——煉。

  初學(xué) C++ 語(yǔ)法(syntax)之后,你應(yīng)該盡快嘗試體驗(yàn) polymorphism(大致而言也就是虛擬函式的運(yùn)用)。等到對(duì) OOP 的精神有了大局掌控的能力,但對(duì) C++ 的許多小細(xì)節(jié)不甚清楚,就是回到C++ 物件模型 煉的時(shí)機(jī)。

  成長(zhǎng),是在高階(polymorphism)和低階(object model)之間反覆震蕩,才能夠震蕩到更高的位階,而不是平平庸庸于中階(C++ syntax)的一灘死水

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿尔山市| 大安市| 崇州市| 九寨沟县| 喜德县| 高台县| 酒泉市| 宝鸡市| 神农架林区| 西安市| 沭阳县| 那曲县| 五原县| 扶沟县| 乐至县| 宜川县| 内丘县| 常熟市| 泰州市| 长岭县| 临安市| 乡宁县| 衡阳县| 阜南县| 邹城市| 佛教| 两当县| 顺平县| 黔西| 抚州市| 中宁县| 双辽市| 衡阳市| 古蔺县| 徐水县| 英吉沙县| 胶南市| 太仓市| 疏附县| 宁津县| 白沙|