【C++】面向?qū)ο笾瓹++初識(shí)-001

第一章 C++概述


1.1 C++簡介

???????“C++”中的 ++ 來自于C語言中的遞增運(yùn)算符 ++总棵,該運(yùn)算符將變量加1和敬。C++ 起初也叫”c with clsss”.通過名稱表明辛掠,C++ 是對(duì)C的擴(kuò)展宴树,因此C++C語言的超集梆奈,這意味著任何有效的c程序都是有效的C++ 程序茧吊。C++ 程序可以使用已有的C程序庫。

庫是編程模塊的集合叽奥,可以在程序中調(diào)用它們扔水。庫對(duì)很多常見的編程問題提供了可靠的解決方法,因此可以節(jié)省程序員大量的時(shí)間和工作量朝氓。

C++ 語言在C語言的基礎(chǔ)上添加了面向?qū)ο缶幊?/strong>和泛型編程的支持魔市。C++ 繼承了C語言高效,簡潔赵哲,快速和可移植的傳統(tǒng)待德。

C++ 融合了3種不同的編程方式:

  • C語言代表的過程性語言.
  • C++C語言基礎(chǔ)上添加的類代表的面向?qū)ο笳Z言.
  • C++ 模板支持的泛型編程。

C語言和C++語言的關(guān)系:
????????c++ 語言是在C語言的基礎(chǔ)上枫夺,添加了面向?qū)ο蠼堋⒛0宓痊F(xiàn)代程序設(shè)計(jì)語言的特性而發(fā)展起來的。兩者無論是從語法規(guī)則上橡庞,還是從運(yùn)算符的數(shù)量和使用上较坛,都非常相似,所以我們常常將這兩門語言統(tǒng)稱“C/C++”扒最。

C語言和C++并不是對(duì)立的競爭關(guān)系:

  • C++C語言的加強(qiáng)丑勤,是一種更好的C語言。
  • C++ 是以C語言為基礎(chǔ)的吧趣,并且完全兼容C語言的特性法竞。

????????C語言和C++ 語言的學(xué)習(xí)是可以相互促進(jìn)。學(xué)好C語言强挫,可以為我們將來進(jìn)一步地學(xué)習(xí)C++ 語言打好基礎(chǔ)岔霸,而C++ 語言的學(xué)習(xí),也會(huì)促進(jìn)我們對(duì)于C語言的理解俯渤,從而更好地運(yùn)用C語言呆细。

1.2 C++起源

???????與c語言一樣,c++ 也是在貝爾實(shí)驗(yàn)室誕生的八匠,Bjarne Stroustrup(本賈尼·斯特勞斯特盧普)在20世紀(jì)80年代在這里開發(fā)了這種語言侦鹏。

在這里插入圖片描述

???????????????????????????????????(C++之父-本賈尼·斯特勞斯特盧普)

???????Stroustrup關(guān)心的是讓c++ 更有用,而不是實(shí)施特定的編程原理或風(fēng)格臀叙。在確定語言特性方面略水,真正的編程比純粹的原理更重要。Stroustrup之所以在c的基礎(chǔ)上創(chuàng)建c++,是因?yàn)?strong>c語言簡潔劝萤、適合系統(tǒng)編程渊涝、使用廣泛且與UNIX操作系統(tǒng)聯(lián)系緊密。

???????用他自己的話來說,“C++ 主要是為了我的朋友和我不必再使用匯編語言跨释、C語言或者其他現(xiàn)代高級(jí)語言來編程而設(shè)計(jì)的胸私。它的主要功能是可以更方便得編寫出好程序,讓每個(gè)程序員更加快樂”鳖谈。

1.3 可移植性和標(biāo)準(zhǔn)

???????假設(shè)為運(yùn)行windows 2000的老式奔騰pc編寫了一個(gè)很好用的c++ 程序岁疼,而管理員決定使用不同操作系統(tǒng)(比如說Mac OSLinux)和處理器的計(jì)算機(jī)替換它。該程序是否可在新平臺(tái)運(yùn)行呢缆娃?當(dāng)然捷绒,但是必須使用為新平臺(tái)設(shè)計(jì)的c++ 編譯器重新編譯。但是是否需要修改寫好的代碼贯要?如果不需要修改代碼的情況下暖侨,重新編譯程序后,程序依然運(yùn)行良好崇渗,該程序是可移植的字逗。

???????程序是否可移植性有兩個(gè)問題需要解決。第一是硬件宅广,針對(duì)特定硬件編程的程序是不可移植的葫掉。第二,語言的實(shí)現(xiàn)跟狱,windows xp c++Redhat LinuxMac OS X對(duì)c++ 的實(shí)現(xiàn)不一定相同挖息。雖然我們希望c++ 版本與其他版本兼容,但是如果沒有一個(gè)公開的標(biāo)準(zhǔn)兽肤,很難做到。因此绪抛,美國國家標(biāo)準(zhǔn)局(American National Standards Institute,ANSI)在1990年設(shè)立一個(gè)委員會(huì)專門負(fù)責(zé)制定c++ 標(biāo)準(zhǔn)(ANSI制定了c語言的標(biāo)準(zhǔn))资铡。國際標(biāo)準(zhǔn)化組織(International Organization for Standardization,ISO)很快通過自己的委員會(huì)加入到這個(gè)行列幢码,創(chuàng)建了聯(lián)合組織ANSI/ISO,制定c++ 標(biāo)準(zhǔn)笤休。

???????經(jīng)過多年的努力,制定出了一個(gè)國際標(biāo)準(zhǔn)ISO/IEC 14882:1998 症副,并于1998年獲得了ISO店雅、IEC(International Electrotechnical Committee,國際電工技術(shù)委員會(huì))和ANSI的批準(zhǔn)。這個(gè)標(biāo)準(zhǔn)就是我們經(jīng)常所說的c++98贞铣。它不僅描述了已有的c++ 特性闹啦,還對(duì)語言進(jìn)行了擴(kuò)展,添加了異常辕坝、運(yùn)行階段類型識(shí)別(RTTI)窍奋、模板和標(biāo)準(zhǔn)模板庫(STL).

???????2003年,發(fā)布了c++ 標(biāo)準(zhǔn)第二版(IOS/IEC 14882:2003),這一版本對(duì)第一版修訂了一些錯(cuò)誤,但并沒有改變語言特性琳袄,因此c++98表示c++98/c++2003.

???????c++ 不斷發(fā)展江场。IOS標(biāo)準(zhǔn)委員會(huì)于2011年8月批準(zhǔn)了新標(biāo)準(zhǔn)ISO/IEC 14882:2011,該標(biāo)準(zhǔn)被稱為c++11,與c++98一樣c++11也新增了許多特性。

ISO c++ 標(biāo)準(zhǔn)還吸收了ANSI c語言標(biāo)準(zhǔn)窖逗,c++ 盡量做到是c的超集址否。意味著在理想情況下,任何有效的c程序都應(yīng)該是有效的c++ 程序碎紊。

???????ANSI不僅定義了c語言佑附,還 定義了一個(gè)ANSI c必須實(shí)現(xiàn)的標(biāo)準(zhǔn)c庫。c++ 也在使用這個(gè)庫矮慕,另外ANSI/ISO c++ 標(biāo)準(zhǔn)還提供了一個(gè)c++ 標(biāo)準(zhǔn)類庫帮匾。

1.4 為什么C++會(huì)成功

???????c++ 最初的目的是將c語言轉(zhuǎn)變?yōu)?strong>OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))語言,但是c++ 后來并沒有這么做痴鳄,而是立足于程序的實(shí)際瘟斜。因?yàn)樵?strong>c 語言方面大量投入的程序員使其完全丟掉c 語言那種編程的思考方式,轉(zhuǎn)而去接受一種新的語言痪寻,新的思維螺句,那么將會(huì)導(dǎo)致這些程序員中大部分人在短時(shí)間內(nèi)可能毫無成果,使其生產(chǎn)率降低橡类。但是如果讓這些c程序員在已有知識(shí)的基礎(chǔ)上蛇尚,再去學(xué)習(xí)c++ 語言,理解運(yùn)用OOP顾画,那么也只是在其已有思維的基礎(chǔ)上進(jìn)行擴(kuò)展而已取劫,這樣可以保持其更好的生產(chǎn)率。

???????簡而言之研侣,強(qiáng)迫程序員放棄c語言和c語言的思考方式谱邪,而去轉(zhuǎn)到OOP上是需要代價(jià)的,但是從c語言轉(zhuǎn)到c++ 所花費(fèi)的代價(jià)就會(huì)小很多庶诡。所以也可以理解為c++ 的出現(xiàn)并不是去替代c,而是對(duì)c的擴(kuò)展惦银,所以在c++ 中既可以使用c++ 新特性,并且可以使用c的過程式思維來編寫程序末誓。

對(duì)于傳統(tǒng)的結(jié)構(gòu)化語言扯俱,我們向來沒有太多的疑惑,函數(shù)調(diào)用那么自然而明顯喇澡,只是從程序的某一個(gè)地點(diǎn)調(diào)到另一個(gè)地點(diǎn)去執(zhí)行迅栅。但是對(duì)于面向?qū)ο?OO)語言,我們疑惑就會(huì)很多晴玖。其原因就是c++編譯器為我們程序員做了太多隱藏的工作:構(gòu)造函數(shù)库继,析構(gòu)函數(shù)箩艺、虛函數(shù)、繼承宪萄、多態(tài)....有時(shí)候它為我們合成出一些額外的函數(shù),有時(shí)候它又偷偷在我們寫的函數(shù)里艺谆,放進(jìn)更多的操作。有時(shí)候也會(huì)給我們的對(duì)象里放進(jìn)一些奇妙的東西拜英,使得我們sizeof的時(shí)候結(jié)果可我們預(yù)期不一樣静汤。

第二章 C++初識(shí)


2.1 簡單的C++程序

2.1.1 c++ hello world

請(qǐng)打開一下示例代碼:

#include<iostream>
using namespace std;
int main(){ 
    cout << "hello world" << endl;
    return EXIT_SUCCESS;
}

分析:

  • #include<iostream>; 預(yù)編譯指令,引入頭文件iostream.
  • using namespace std; 使用標(biāo)準(zhǔn)命名空間
  • cout << “hello world”<< endl;printf功能一樣居凶,輸出字符串”hello wrold”

問題1:c++頭文件為什么沒有.h虫给?

???????在c語言中頭文件使用擴(kuò)展名 .h ,將其作為一種通過名稱標(biāo)識(shí)文件類型的簡單方式。但是c++ 得用法改變了侠碧,c++ 頭文件沒有擴(kuò)展名抹估。但是有些c語言的頭文件被轉(zhuǎn)換為c++ 的頭文件,這些文件被重新命名弄兜,丟掉了擴(kuò)展名 .h (使之成為c++ 風(fēng)格頭文件)药蜻,并在文件名稱前面加上前綴c(表明來自c語言)。例如c++ 版本的math.hcmath.

???????由于C使用不同的擴(kuò)展名來表示不同文件類型替饿,因此用一些特殊的擴(kuò)展名(如hpphxx)表示c++ 的頭文件也是可以的语泽,ANSI/IOS標(biāo)準(zhǔn)委員會(huì)也認(rèn)為是可以的,但是關(guān)鍵問題是用哪個(gè)比較好视卢,最后一致同意不適用任何擴(kuò)展名踱卵。

頭文件類型 約定 示例 說明
c++舊式風(fēng)格 以.h結(jié)尾 iostream.h c++程序可用
c舊式風(fēng)格 以.h結(jié)尾 math.h c/c++程序可用
c++新式風(fēng)格 無擴(kuò)展名 iostream c++程序可用,使用namespace std
轉(zhuǎn)換后的c 加上前綴c,無擴(kuò)展名 cmath c++程序可用据过,可使用非c特性惋砂,如namespace std

問題2:using namespace std 是什么?

???????namespace是指標(biāo)識(shí)符的各種可見范圍。命名空間用關(guān)鍵字namespace 來定義绳锅。命名空間是C++ 的一種機(jī)制西饵,用來把單個(gè)標(biāo)識(shí)符下的大量有邏輯聯(lián)系的程序?qū)嶓w組合到一起。此標(biāo)識(shí)符作為此組群的名字榨呆。

問題3:cout 、endl 是什么庸队?

???????coutc++ 中的標(biāo)準(zhǔn)輸出流积蜻,endl是輸出換行并刷新緩沖區(qū)。

2.1.2 面向過程

???????面向過程是一種以過程為中心的編程思想彻消。

???????通過分析出解決問題所需要的步驟竿拆,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了宾尚。

???????面向過程編程思想的核心:功能分解丙笋,自頂向下谢澈,逐層細(xì)化(程序=數(shù)據(jù)結(jié)構(gòu)+算法)。

???????面向過程編程語言存在的主要缺點(diǎn)是不符合人的思維習(xí)慣御板,而是要用計(jì)算機(jī)的思維方式去處理問題,而且面向過程編程語言重用性低,維護(hù)困難纵顾。

2.1.3 面向?qū)ο?/h3>

???????面向?qū)ο缶幊蹋?strong>Object-Oriented Programming)簡稱 OOP 技術(shù)串慰,是開發(fā)計(jì)算機(jī)應(yīng)用程序的一種新方法、新思想笙各。過去的面向過程編程常常會(huì)導(dǎo)致所有的代碼都包含在幾個(gè)模塊中钉答,使程序難以閱讀和維護(hù)。在做一些修改時(shí)常常牽一動(dòng)百杈抢,使以后的開發(fā)和維護(hù)難以為繼数尿。而使用 OOP 技術(shù),常常要使用許多代碼模塊惶楼,每個(gè)模塊都只提供特定的功能右蹦,它們是彼此獨(dú)立的,這樣就增大了代碼重用的幾率鲫懒,更加有利于軟件的開發(fā)嫩实、維護(hù)和升級(jí)。

???????在面向?qū)ο笾锌遥惴ㄅc數(shù)據(jù)結(jié)構(gòu)被看做是一個(gè)整體甲献,稱作對(duì)象,現(xiàn)實(shí)世界中任何類的對(duì)象都具有一定的屬性和操作颂翼,也總能用數(shù)據(jù)結(jié)構(gòu)與算法兩者合一地來描述晃洒,所以可以用下面的等式來定義對(duì)象和程序:

對(duì)象 = 算法 + 數(shù)據(jù)結(jié)構(gòu)
程序 = 對(duì)象 + 對(duì)象 + ……

???????從上面的等式可以看出,程序就是許多對(duì)象在計(jì)算機(jī)中相繼表現(xiàn)自己朦乏,而對(duì)象則是一個(gè)個(gè)程序?qū)嶓w球及。
???????面向?qū)ο缶幊趟枷氲暮诵模?strong>應(yīng)對(duì)變化,提高復(fù)用呻疹。

2.1.4 面向?qū)ο笕筇匦?/h3>
  • 封裝
    ???????把客觀事物封裝成抽象的類吃引,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏刽锤。
    ???????類將成員變量和成員函數(shù)封裝在類的內(nèi)部镊尺,根據(jù)需要設(shè)置訪問權(quán)限,通過成員函數(shù)管理內(nèi)部狀態(tài)并思。

  • 繼承
    ???????繼承所表達(dá)的是類之間相關(guān)的關(guān)系庐氮,這種關(guān)系使得對(duì)象可以繼承另外一類對(duì)象的特征和能力。
    ???????繼承的作用: 避免公用代碼的重復(fù)開發(fā)宋彼,減少代碼和數(shù)據(jù)冗余弄砍。

  • 多態(tài)
    ???????多態(tài)性可以簡單地概括為“一個(gè)接口仙畦,多種方法”,字面意思為多種形態(tài)音婶。程序在運(yùn)行時(shí)才決定調(diào)用的函數(shù)慨畸,它是面向?qū)ο缶幊填I(lǐng)域的核心概念。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桃熄,一起剝皮案震驚了整個(gè)濱河市先口,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞳收,老刑警劉巖碉京,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異螟深,居然都是意外死亡谐宙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門界弧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凡蜻,“玉大人,你說我怎么就攤上這事垢箕』ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵条获,是天一觀的道長忠荞。 經(jīng)常有香客問我,道長帅掘,這世上最難降的妖魔是什么委煤? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮修档,結(jié)果婚禮上碧绞,老公的妹妹穿的比我還像新娘。我一直安慰自己吱窝,他們只是感情好讥邻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著院峡,像睡著了一般兴使。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撕予,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天鲫惶,我揣著相機(jī)與錄音蜈首,去河邊找鬼实抡。 笑死欠母,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吆寨。 我是一名探鬼主播赏淌,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼啄清!你這毒婦竟也來了六水?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤辣卒,失蹤者是張志新(化名)和其女友劉穎掷贾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荣茫,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡想帅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啡莉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片港准。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咧欣,靈堂內(nèi)的尸體忽然破棺而出浅缸,到底是詐尸還是另有隱情,我是刑警寧澤魄咕,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布衩椒,位于F島的核電站,受9級(jí)特大地震影響蚕礼,放射性物質(zhì)發(fā)生泄漏烟具。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一奠蹬、第九天 我趴在偏房一處隱蔽的房頂上張望朝聋。 院中可真熱鬧,春花似錦囤躁、人聲如沸冀痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽言蛇。三九已至,卻和暖如春宵距,著一層夾襖步出監(jiān)牢的瞬間腊尚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國打工满哪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婿斥,地道東北人劝篷。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像民宿,于是被迫代替她去往敵國和親娇妓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容