亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C++學(xué)習(xí)中的一個整體性問題

        2007-12-31 00:00:00王立柱
        計算機教育 2007年20期

        摘要:C++是應(yīng)用最廣的編程語言,C++的應(yīng)用水平代表著一個國家的軟件產(chǎn)業(yè)發(fā)展水平,但是C++是最難掌握的編程語言。本文認為,只有自覺地把C、C++和數(shù)據(jù)結(jié)構(gòu)作為一個整體,才能解決C++學(xué)習(xí)難的問題。

        關(guān)鍵詞:C語言;C++語言;數(shù)據(jù)結(jié)構(gòu);重用程度

        中圖分類號:G642文獻標識碼:B

        文章編號:1672-5913 (2007) 20-0074-03

        C++是計算機軟件領(lǐng)域中應(yīng)用最廣的編程語言,包括操作系統(tǒng)、設(shè)備驅(qū)動、編譯器、系統(tǒng)工具、圖像處理、數(shù)據(jù)庫系統(tǒng)以及通用辦公軟件等在內(nèi)的能夠代表一個國家軟件產(chǎn)業(yè)發(fā)展水平的基礎(chǔ)軟件都是適合C++應(yīng)用的領(lǐng)域,因此,C++的應(yīng)用水平代表著一個國家的軟件產(chǎn)業(yè)發(fā)展水平。不僅如此,C++具有的既可以針對底層硬件設(shè)計又可以面向應(yīng)用軟件設(shè)計的功能使它成為我們深入分析、理解和應(yīng)用其它各種軟件的方法,學(xué)好C++,再學(xué)用其它軟件就容易多了,用侯捷的話說,“萬千使用者前赴后繼的動力是:一旦學(xué)成,妙用無窮”。

        C++也是最難掌握的編程語言。一是內(nèi)容多:C++新標準出現(xiàn)之后,“一個覆蓋面非常廣闊的庫現(xiàn)在成了標準C++的一部分,其中包括以前稱為STL(標準模板庫)的內(nèi)容。新的string類型、一組順序和關(guān)聯(lián)容器類型(比如vector、list、map和set),以及在這些類型上進行操作的一組可擴展的泛型算法(generic algorithm),都是這個新標準的特性”[1]。二是語法和語義不易理解:C++程序要由C++編譯器在語言層面上展開,例如,程序員設(shè)計的很多函數(shù)并不在程序員程序中被調(diào)用,而是在展開之后的內(nèi)部C++程序表現(xiàn)中被調(diào)用,這與傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計完全不同,令很多人感到困惑,他們抱怨C++編譯器說:“它在你的背后做事情”[2],而C++很多令人疑惑的概念都和C++編譯器有關(guān)。本文認為,只有從C、C++和數(shù)據(jù)結(jié)構(gòu)作為一個整體出發(fā),才能解決C++學(xué)習(xí)難的問題。

        1數(shù)據(jù)結(jié)構(gòu)是語言研究的對象

        長期以來,C、C++和數(shù)據(jù)結(jié)構(gòu)都是相互獨立的課程:C與C++的聯(lián)系僅僅限于C++與C兼容,而主要強調(diào)的還是它們在方法上的截然不同;數(shù)據(jù)結(jié)構(gòu)強調(diào)不依賴任何編程語言的描述,并且更多的是用類語言即非編程語言描述,即便使用了編程語言,也僅是作為描述數(shù)據(jù)結(jié)構(gòu)的工具。C++標準的出現(xiàn),迫使我們重新審視它們之間的關(guān)系。

        當我們說,數(shù)據(jù)結(jié)構(gòu)不依賴任何編程語言的描述,或者說,編程語言僅僅是描述數(shù)據(jù)結(jié)構(gòu)的工具,那是為了不受編程語言的語法細節(jié)的影響,以突出典型算法的設(shè)計和算法的時間復(fù)雜度分析。但是,如果重點研究的是數(shù)據(jù)結(jié)構(gòu)代碼的重用性,那么數(shù)據(jù)結(jié)構(gòu)不僅必須用編程語言描述,而且還必須研究用什么編程語言描述才能提高數(shù)據(jù)結(jié)構(gòu)代碼的重用程度、使語言能夠進一步發(fā)展的問題。我們要學(xué)習(xí)的C++標準庫以及建立其上的重用程度更高的泛型算法都是這種研究的成果。在這里,數(shù)據(jù)結(jié)構(gòu)不再是編程語言描述的對象,而是編程語言研究的對象,是編程語言的一部分。用個比喻來說,研究資本主義生產(chǎn)活動中的人和研究解剖學(xué)意義下的人,意義是不同的。

        數(shù)據(jù)結(jié)構(gòu)作為語言的研究對象,要求我們按照語言發(fā)展的規(guī)律去研究它。語言發(fā)展是語言重用程度不斷提高:從匯編語言,C語言,到C++,Java的流行,是基礎(chǔ)設(shè)計方法重用程度的提高;從指令語句到函數(shù),從對象到構(gòu)件,支持重用的語言機制日漸成熟。按照語言發(fā)展規(guī)律去研究,就是“從事物的發(fā)展、‘自己運動’、變化中來觀察事物” [3],即從事物的關(guān)系和它的必然發(fā)展去觀察事物本身。Bruce Eckel教授在他的Thinking in C++(C++編程思想)一書中說:“由于很多人學(xué)習(xí)走了彎路,因此,我們已經(jīng)開始探索C程序員轉(zhuǎn)移到C++語言性能層上的方法” [4]。他先用C語言實現(xiàn)一個袖珍C庫(一個簡化的順序結(jié)構(gòu)),然后再轉(zhuǎn)換為C++實現(xiàn),由此進入C++。他認為,“C++的主要設(shè)計目標之一是使庫容易使用。這意味著,在C中使用庫有困難。懂得這一點就對C++設(shè)計有了初步的了解,從而對如何使用它有了更深入的認識”[4]。其實,這不僅對C程序員,而且對任何想學(xué)好C++的人來說,都是重要的。

        2數(shù)據(jù)結(jié)構(gòu)領(lǐng)我們從C走進C++

        Bruce Eckel教授從軟件發(fā)展的角度,揭示了C、C++和結(jié)構(gòu)的聯(lián)系:C需要創(chuàng)建結(jié)構(gòu),但是C語言結(jié)構(gòu)不能像語言內(nèi)部類型一樣使用,這不利于軟件重用程度的進一步提高,于是,“用戶從設(shè)計自定義數(shù)據(jù)類型開始擴展C語言” [5],“C++對C的結(jié)構(gòu)體類型作了實質(zhì)性的擴充” [5]??梢哉f,“C++的許多性能都圍繞著一個根本的思想:創(chuàng)建新的數(shù)據(jù)類型的能力”[4]。這里需要闡明結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)的關(guān)系:結(jié)構(gòu)是變量集合體,數(shù)據(jù)結(jié)構(gòu)指向量、集合、樹、圖、代數(shù)方程、多項式等典型離散結(jié)構(gòu),也可以說,是典型算法依賴的結(jié)構(gòu),或者說,是服務(wù)于典型算法的結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)和算法是相互依存的。從語言上講,結(jié)構(gòu)包含數(shù)據(jù)結(jié)構(gòu),從算法上講,結(jié)構(gòu)指數(shù)據(jù)結(jié)構(gòu)。

        Bruce Eckel教授實際上提示了學(xué)習(xí)C++的一個基本原則:不要從概念出發(fā),要從程序設(shè)計的需要出發(fā),而且他選擇了具有典型意義的需要——順序結(jié)構(gòu)的重用性。很多C++教材為了避免數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,選擇了從數(shù)值結(jié)構(gòu)(而且常常是簡單的數(shù)值結(jié)構(gòu))向類的轉(zhuǎn)換的學(xué)習(xí)方法。一個需要是否具有典型意義,要看它在多大程度上反映語言的必然發(fā)展。C++的特征可以歸結(jié)為四個方面:一個更好的C,支持數(shù)據(jù)抽象,支持面向?qū)ο缶幊蹋С址盒途幊?。順序結(jié)構(gòu)比數(shù)值結(jié)構(gòu)具有更多的需要抽象的內(nèi)容,以結(jié)構(gòu)串為例:因為它含有指針成員,所以必須創(chuàng)建構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝賦值運算符重載;因為有C文本串成員,所以必須創(chuàng)建轉(zhuǎn)換構(gòu)造函數(shù)、轉(zhuǎn)換賦值運算符重載、成員轉(zhuǎn)換函數(shù);因為具有數(shù)值計算的特點,所以必須重載邏輯運算符和關(guān)系運算符;而且它具有的豐富的、需要封裝的函數(shù),其函數(shù)代碼幾乎就是C結(jié)構(gòu)串代碼,這使從C到C++的轉(zhuǎn)換更“平滑”、漸進,使我們可以集中研究轉(zhuǎn)換的C++內(nèi)容;還有,轉(zhuǎn)換后的C++類串是更好的C串;特別是,C++類串是研究C++標準中非順序結(jié)構(gòu)、面向?qū)ο缶幊毯头盒途幊痰幕A(chǔ)。而數(shù)值結(jié)構(gòu)因為一般不含指針成員,所以在向C++轉(zhuǎn)換過程中,拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝賦值運算符重載可以創(chuàng)建也可以不創(chuàng)建,沒有差別,而且轉(zhuǎn)換后的結(jié)果在以后的C++標準的學(xué)習(xí)中應(yīng)用很少。

        既然C++產(chǎn)生于C程序設(shè)計的需要,那么就可以用C語言明確地表達這種需要和滿足這個需要的可能的方法,這是人的主觀能動性。結(jié)果是一組C語句可能被抽象為一條C++語句,或者說,一條C++語句可能被解讀為一組C語句,這使我們可以從C的角度反向?qū)徱暳钊死Щ蟮腃++語法和語義,困惑被C程序員自覺能動的活動即實踐解除了?!胺彩前牙碚撘蛏衩刂髁x的神秘東西,都能在人的實踐中以及對這個實踐的理解中得到合理的解決” [6]。以結(jié)構(gòu)串(簡化的)為例,表1和表2顯示了從C描述到C++描述的部分轉(zhuǎn)換內(nèi)容。

        3學(xué)習(xí)中的辯證思維

        概括起來說,C、C++和數(shù)據(jù)結(jié)構(gòu)是相互包含的整體。辯證法所說的相互包含或某物中包含他物,并不是指他物作為一個現(xiàn)成的細小的東西包含在某物中,而是作為某物的一個方面、一種趨勢、一種因素包含在某物中。C包含C++,是指C包含著C++作為其必然的發(fā)展。C++包含C是因為它是更好的C,例如,C++的向量類模板std::vector就是更好的C數(shù)組,C++類串就包含著C文本串?!懊恳环N事物都有它的特殊的否定方式,經(jīng)過這樣的否定,它同時就獲得發(fā)展,每一種觀念和概念也是如此”[7]。在這個意義上講,C、C++和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)是統(tǒng)一的。

        Bruce Eckel教授雖然意識到他自己提出的從順序結(jié)構(gòu)的C描述到C++描述的轉(zhuǎn)換在引入C++概念時的重要作用,但是他沒有理解其中所包含的全部意義,自然也沒有完全按照上述的分析去做,而是把重點放在引導(dǎo)讀者從C++編譯器實現(xiàn)匯編代碼的角度反向?qū)徱旵++的語法和語義。為了使匯編代碼簡單,他只得使用“玩具例子”,從而讓他最初想法中的許多積極因素從中流失了。

        在C++的學(xué)習(xí)或授課過程過程,我們會受到各式各樣思想的影響。而要把C、C++和數(shù)據(jù)結(jié)構(gòu)作為為一個有機的整體,必須堅持辯證思維。我們遇到問題,都有自己的思想,無論愿意還是不愿意,有意還是無意,都受某種哲學(xué)的支配,問題只在于,我們愿意接受哪一種哲學(xué)的支配。對自然科學(xué)的成就,辯證唯物主義不去概括,唯心主義、形而上學(xué)等哲學(xué)就會去總結(jié)。常常是,我們自以為得意的、甚至?xí)r髦的觀點,其本質(zhì)卻是在幾百年前就已經(jīng)提出了的、早已在哲學(xué)上被廢棄了的命題。例如,程序設(shè)計原理發(fā)展之快已經(jīng)超越了人們的適應(yīng)能力[5],這是現(xiàn)在流行的、雖然表達多種多樣但實質(zhì)相同的不可知論,它阻礙了我們按照辯證法的要求在程序設(shè)計領(lǐng)域內(nèi)去揭示這個不斷的轉(zhuǎn)變過程的運動規(guī)律的實踐。又例,“世界是由對象構(gòu)成的,因此,面向?qū)ο蟮某绦蛟O(shè)計方法用人們看待現(xiàn)實世界的方法來表達計算機程序”[13]。那么請問,世界一開始就是由對象構(gòu)成的,為什么面向?qū)ο蟮某绦蛟O(shè)計方法出現(xiàn)在二十世紀末,而不是更早,為了回答這個問題,就必須回到程序設(shè)計這個特殊的領(lǐng)域中來,仔細研究該領(lǐng)域中各個方面的關(guān)系和它們的發(fā)展,把現(xiàn)實的需要和為了滿足需要所做的現(xiàn)實的努力即人的能動的活動包括到C++概念的完美的定義中去,這樣我們就等于回到了辯證的思維上來。

        愿有志學(xué)好C++的人,能夠做一個自覺的辯證唯物主義者。

        參考文獻

        [1] 潘愛民,張麗. C++ Primer第三版(中文版)[M]. 北京:中國電力出版社,2004.

        [2] 侯捷. 深度探索C++對象模型[M]. 武昌:華中科技大學(xué)出版社,2001.

        [3] 余源培. 時代精神的精華—馬克思主義哲學(xué)原著導(dǎo)讀(下冊)[M]. 上海:復(fù)旦大學(xué)出版社,1992.

        [4] 劉宗田,邢大紅,孫慧杰. C++編程思想[M]. 北京:機械工業(yè)出版社,2001.

        [5] 林麗閔,別紅霞. 標準C++寶典[M]. 北京:電子工業(yè)出版社,2001.

        [6] 馬克思恩格斯選集(第一卷). 北京:人民出版社,1995.

        [7] 馬克思恩格斯選集(第三卷). 北京:人民出版社,1995.

        作者簡介:天津師范大學(xué)副教授,于南開大學(xué)數(shù)學(xué)系獲理學(xué)學(xué)士學(xué)位,主講C/C++與數(shù)據(jù)結(jié)構(gòu)課程,主持天津市教委項目“計算機基礎(chǔ)課程體系改革”,主編教材《C/C++與數(shù)據(jù)結(jié)構(gòu)》第3版(上下冊),獲國家十一五規(guī)劃教材,由清華大學(xué)出版社出版。

        久久久久久久极品内射| 中文亚洲第一av一区二区| 国产精品自产拍在线18禁| 亚洲av国产av综合av卡| 成年无码aⅴ片在线观看| 亚洲男人天堂av在线| 99麻豆久久精品一区二区| 欧美性猛交aaaa片黑人| 自拍偷自拍亚洲精品情侣| 久久综合视频网站| 日韩精品自拍一区二区| 高清午夜福利电影在线| 8ⅹ8x擦拨擦拨成人免费视频| 国产av综合一区二区三区最新| 日韩av天堂综合网久久| 亚洲第一狼人天堂网亚洲av| 成人欧美一区二区三区a片| 亚洲区精选网址| 久久亚洲免费精品视频| 成人亚洲精品777777| 国产人妻黑人一区二区三区| 亚洲国产精品日韩专区av| 白白色发布免费手机在线视频观看 | 不卡一区二区视频日本| 亚洲亚洲人成综合网络| 国产精品自产拍在线18禁| 亚洲精品在线一区二区三区| 国产精品美女久久久网av| 免费xxx在线观看| 久久久久人妻精品一区5555| 韩国日本一区二区在线| 永久黄网站色视频免费看 | 在线天堂中文一区二区三区| 99伊人久久精品亚洲午夜| 潮喷大喷水系列无码久久精品| 亚洲饱满人妻视频| 精品国产一区二区三区男人吃奶| 日本一区二区三区视频网站| 国产99久久精品一区二区| 欧美日韩综合在线视频免费看| 亚洲福利二区三区四区|