# 【知識精講】你好,C++
## Part1
我們已經知道,C 語言因為其具有很多優點,自 20 世紀 70 年代誕生以來,已經得到了廣泛的應用,全世界有大量的 C 語言程序員,庫代碼和開發環境。然而盡管如此,C 語言畢竟是一種面向過程的語言,已經遠遠不足以滿足運用面向對象方法,進行軟件開發的需要了。因此,在 1980 年,AT&T 貝爾實驗室的 Bjarne Stroustrup 博士便在 C 語言的基礎上,發明了 C with Class 語言,最終演變成了現在的 C++ 語言。
C++ 語言的標準化工作從 1989 年開始,經過不斷完善,在 1998 年被國際標準化組織(ISO)欽定為國際標準,并隨著時間推移而更新——這門課程使用的是 C++ 11 標準。
## Part2
如果我們把計算機科學比喻成武俠小說的世界的話,那么大規模的軟件工程活動,就相當于是一整套武學體系——而 C++ 語言,則是這個體系中最為基本的拳腳招數。我們在學習編程語言的時候,經常會遇到這樣的爭論:究竟學習哪種編程語言更好呢?上文提到的 C++ 之父 Stroustrup 曾經說過這么一句話:世界上只有兩種編程語言,一種是被人罵的,另一種是沒人用的……顯然,C++ 就是前一種語言。
盡管C++ 語言飽受非議,但必須承認,它仍然是計算機科學史上最為重要的語言之一——從它誕生以來,幾乎每一個平臺,每一個系統,都有大量的由 C++ 編寫出的應用程序。憑借著優秀的面向對象特性,優秀的運行效率和良好的可移植性,C++ 語言直到今天仍然有著極其廣泛的應用——后續發展的典型的面向對象語言,比如 JAVA 和 C# ,也深受 C++ 影響,在語法上跟 C++ 幾乎如出一轍。

圖為著名的開源瀏覽器 FireFox,提供多個平臺版本——很多著名的跨平臺軟件,比如 Google Chrome 和 Microsoft Office,其核心部分都是由 C++ 語言編寫的,在不同平臺之間可以共享大部分代碼。
## Part3
很多同學可能會覺得,聽說 C++ 好像很難學的樣子,我能學會它嗎?事實上,C++ 確實很難——但也很簡單。為什么這么說呢?因為 C++ 實際上是一個由多個部分組成的聯邦——上文提到的 C++ 之父還曾經說過:“我特別討厭語言的設計者把自己的喜好強加給用戶。”,于是 C++ 就變成了現在的樣子——同時包含多個范式,例如面向對象編程,函數式編程,模板,以及繼承自純 C 語言的面向過程編程等。
## Part4
難能可貴的是,這幾種看似沒什么關聯的范式,在 C++ 中混用依然十分的自然——不過想要同時掌握這些范式,自然也就變得極度困難了,所以才會有“ C++ 很難精通”這樣的說法。然而,這實際上是一種典型的誤解——因為你不需要刻意地去使用C++ 的各種特性,C++ 本身也并不強迫你必須掌握某些特性才能編寫你的程序。
事實上,絕大多數人在學習和工作中,都不太可能同時用到以上的所有范式——所以,大家只要放輕松就好了,把C++ 當成一頓各取所需的自助餐,取得你所需要的部分就行了。跟隨我們的課程深入學習,大家就會發現,C++ 其實并沒有那么可怕……

C++ 就像自助餐一樣,各取所需即可——你不需要刻意地去使用那些復雜的特性,只要能完成你的工作就行。
## Part5
通過對 C++ 進行學習,你將會在擁有熟練的編程能力的同時,掌握一系列基本的編程思想和方法——萬變不離其宗,就算你在以后的工作中,不使用 C++ 而使用其他的語言,你在對 C++ 的學習中所獲得的積累,依然可以讓你在你的工作中,終身受用。
## Part6
最后,給大家補充一些小八卦:2007 年的時候,Linux 之父 Linus Torvalds 曾經怒斥一名試圖向 Git 貢獻 C++ 代碼的微軟程序員,并炮轟 C++ 一無是處——一時間純 C 派和 C++ 派之間發生了一系列熱火朝天的撕逼大戰。經常瀏覽某些程序員社區的同學也都知道,“PXX 是世界上最好的語言”之類的口水話題也經常引發大規模的爭吵。

Linus 炮轟 C++原文(英文)
不過,對于各位初學 C++ 的同學來說,參與這種爭吵顯然是浪費生命的愚蠢行為——再好的語言也一樣可以寫出爛代碼,作為初學者,現在大家需要做的是努力提高自己的編程能力和知識水平——至于具體哪種語言更好,顯然不是我們現在應該考慮的問題。
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》