第一章 c++簡(jiǎn)介和預(yù)備知識(shí)

1.C/C++語(yǔ)言的歷史:

??? 20世紀(jì)70年代早期,貝爾實(shí)驗(yàn)室的Dennis Ritchie(里奇)致力于開(kāi)發(fā)UNIX操作系統(tǒng)(Ken Thompson在69年寫(xiě)了UNIX的核心原型,為了讓這個(gè)核心能夠在不同的計(jì)算機(jī)上運(yùn)行,73年Ritchie與Ken合作用C語(yǔ)言重新改寫(xiě),標(biāo)志著Unix的誕生)。 操作系統(tǒng)是能夠管理計(jì)算機(jī)資源、 處理計(jì)算機(jī)與用戶之間交互的一組程序。例如,操作系統(tǒng)將系統(tǒng)提示符顯示在屏幕上以提供終端式界面、提供管理窗口和鼠標(biāo)的圖形界面以及運(yùn)行程序。為完成這項(xiàng)工作, Ritchie 需要一種語(yǔ)言,它必須簡(jiǎn)潔,能夠生成簡(jiǎn)潔、快速的程序, 并能有效地控制硬件。Ritchie 希望有一種語(yǔ)言能將低級(jí)語(yǔ)言的效率、硬件訪問(wèn)能力和高級(jí)語(yǔ)言的通用性、可移植性融合在一起,于是他在舊語(yǔ)言(也就是B語(yǔ)言)的基礎(chǔ)上開(kāi)發(fā)了C語(yǔ)言。

??? C++也是在貝爾實(shí)驗(yàn)室誕生的,Bjarne Stroustrup在20世紀(jì)80年代開(kāi)發(fā)出C++,之后又經(jīng)過(guò)了幾次擴(kuò)充。C++強(qiáng)調(diào)的是實(shí)用價(jià)值,而不是意識(shí)形態(tài)方法,這也是C++獲得成功的原因之一。

2.OOP面向?qū)ο蟮木幊?/b>

??? 結(jié)構(gòu)化編程是自上而下的編程,是面向過(guò)程的編程形式,是C語(yǔ)言編程帶來(lái)的一種編程的進(jìn)步(以前的編程不是結(jié)構(gòu)化的,被形容為意大利面式的編程),但是隨著程序的越來(lái)越大,結(jié)構(gòu)化編程也遇到了瓶頸。

??? OOP面向?qū)ο蟮木幊?/b>解決了這一問(wèn)題,它有幾個(gè)特點(diǎn):一是自下而上,與結(jié)構(gòu)化編程反其道而行之;二是將數(shù)據(jù)和方法封裝到一起(類與對(duì)象);三是代碼的重用性更強(qiáng)。

??? C++支持面向過(guò)程,面向?qū)ο?/b>和泛型編程三種形式。

??? 需要注意的是,這三種編程思想并沒(méi)有優(yōu)劣之分,只是適應(yīng)于不同的方面。即使是面向?qū)ο蟮木幊讨幸残枰嫦蜻^(guò)程的思想,一般的編程中這三種編程思想(特別是面向過(guò)程和面向?qū)ο螅┒际切枰褂玫?,要熟練而靈活的采用各種策略。比如C++的面向?qū)ο蟮木幊痰念惙椒ǖ木唧w實(shí)現(xiàn),采用的就是面向過(guò)程的處理思想;而一個(gè)大的程序要分成幾個(gè)模塊,就是面向過(guò)程的思想;每個(gè)模塊具體使用一些對(duì)象和類來(lái)進(jìn)行封裝和實(shí)現(xiàn),則明顯是面向?qū)ο蟮模蝗绻婕暗氖翘幚聿煌臄?shù)據(jù)形式,則需要泛型編程。這三種是相輔相成的,是c++強(qiáng)大而全面的功能的體現(xiàn)。

3.泛型編程(generic programming)

??? 只編寫(xiě)一個(gè)泛型,而不是特定的類型,用于對(duì)實(shí)際中各種不同類型泛型是它們的抽象)的管理,c++模板提供了完成這種編程的機(jī)制(特別是基于模板的算法和容器)。

4.編譯的過(guò)程

??? 是從源代碼文件.cpp或.cxx文件)通過(guò)編譯器形成目標(biāo)文件.obj或.o),再通過(guò)鏈接程序形成最終可執(zhí)行程序.out或.exe)。


5. !?。。?!Linux系統(tǒng)c++的編譯:

??? linux系統(tǒng)中最常用的編譯器是g++,這是來(lái)自FSF(Free Software Foundation自由軟件基金會(huì))的GNU C++編譯器。在linux系統(tǒng)下,寫(xiě)好c++程序后,有頭文件.h,源代碼文件.cpp或.cxx,我們只需要編譯源代碼文件.cpp或.cxx,比如有a.cpp b.cpp兩個(gè)文件,使用命令g++ a.cpp b.cpp就可以通過(guò)編譯和鏈接兩個(gè)過(guò)程(此時(shí).h文件應(yīng)該在同一個(gè)文件夾或者源代碼文件中的include已經(jīng)指定好了路徑,比如#include “../math/aa.h”),生成a.out可執(zhí)行文件,編譯過(guò)程中生成的.o目標(biāo)文件會(huì)被刪除。如果我們希望編譯的目標(biāo)文件.o文件保留,那么可以使用g++ -c a.cpp b.cpp命令;然后再執(zhí)行g++ a.o b.o就可以完成鏈接,此時(shí).o文件不會(huì)被刪除。如果修改了一部分源代碼文件,而沒(méi)有修改其他,那么可以使用g++已經(jīng)修改的所有文件.cpp 所有沒(méi)修改的文件.o 這樣的命令來(lái)重新編譯鏈接,不必編譯鏈接所有的源代碼,這樣做對(duì)于大型項(xiàng)目來(lái)說(shuō)可以簡(jiǎn)化項(xiàng)目的修改(make指令就是這樣工作的,當(dāng)然,它更復(fù)雜一些,它會(huì)自動(dòng)確定依賴性)。g++ a.cpp -o b.out命令可以生成自己命名的可執(zhí)行文件(-c不刪除中間代碼,-o生成指定名字的可執(zhí)行文件)。

下一篇:開(kāi)始學(xué)習(xí)C++(1)進(jìn)入C++(基礎(chǔ)知識(shí)簡(jiǎn)介)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容