Please "Learning Standard C++ as a New Language", and "Speaking C++ as a Native"
朋友的公司還在用C++的環境編寫著“帶類的C”代碼,每天回來就倒苦水,我曾經工作過的一家公司也有動辄幾千行的C風格的函數
這裡概述一下C++最最基本的用法,只能算是入門前的准備工作
描述問題,用於與人交流
描述解決方案,用於與計算機交流
假設解決方案就是問題的描述本身,那麼,這是完美的,例如 Select * From books;
而目前主流開發平台還做不到這一點,於是存在兩個我們需要處理的空間,“問題空間”和“算法空間”
小說的描述依賴於自然語言,凡不可言說者必保持沉默,程序的表達依賴於編程語言
學習C++,就是用C++的術語、詞匯來描述這兩個空間,而不是C語言的術語、詞匯;其它語言也是如此
因此,你應該首先熟悉C++本身
不要理會面向對象,不要理會泛型編程,不要理會函數式編程,不要理會產生式編程,在上學學習母語語法前,你已經學會了用人類的語言表達高興憤怒,而不是用小狗或別的動物的語言,也已經學會了如何用人類的語言討要你心愛的玩具;讓我們用C++的語言做個玩具程序:
讀入一個文本文件,將每一行文本形成的字符串按字母順序從小到大排序,然後將排序後的內容寫入另一個文件
分析:
問題空間中的對象:輸入文件,字符串,輸出文件
算法空間中的對象:讀,緩沖,排序,寫
用C++描述:
輸入文件:ifstream
字符串:string
輸出文件:ofstream
讀:getline
緩沖:vector, vector.push_back
排序:sort
寫:copy
最終的程序:
int main()
{
ifstream fin("in.txt") ; //輸入文件
vector<string> buf; //緩沖區
string d; //字符串臨時對象
while(getline(fin,d)) buf.push_back(d) ; //讀,並緩沖
sort(buf.begin() ,buf.end()) ; //排序
ofstream fout("out.txt") ; //輸出文件
copy(buf.begin() ,buf.end() ,ostream_iterator<string>(fout,"\n")) ; //寫
}
沒有char*[],scanf,printf,OpenFile等非我族類的詞匯
至少有四本教材可用於“正確的C++的正確的入門”,推薦閱讀
Essential C++
C++ Primer
The C++ Programming Language
The C++ Standard Library
定理的證明依賴於基礎數學語言,但也可以依賴於其它已經被證明的定理,入門之後,就可以學習如何用C++來表達面向對象,表達通用算法,像前文的sort,copy等,或用來實現其它更高層的抽象,如用它來實現一種DSL,使我們能夠將上面程序的描述和解決方案用下面的語句統一起來:
Write (Read * From in.txt Orderby alpha) To out.txt;