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)介)