Essential C++ Primer

來源:互聯網
上載者:User

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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.