學習完 C++ Primer 能做什麼項目練手或者看什麼好的開源項目源碼?

很著急找點好的源碼看和好的項目練手,怕不用很容易忘啊!


學習完c++ primer

請問學習完是什麼狀態,而 C++ Primer 是哪一版課後習題全都自己做過了?

如果你學習完,指的是把書看完了一遍,那容易忘是必然的,又不是讀唐詩宋詞,誰能不忘?再說,把自己當活字典有何用?

如果是第四版,我建議你再去看第五版,了解 C++ 11 的語法,基於 C++ 11 標準進行練手,在當前環境下,意義要更大一些。

課後習題實際隱藏著很多小項目。譬如:

  • 第七章引入了兩個類:Screen 和 Window_mgr,這實際是一個寫字板程序的雛形,有沒有想過繼續完善下?結合 GUI 框架做出一個小玩意來?
  • 從第十二章到第十三章,逐步引入以下類:StrBlob -&> StrVec -&> String,這實際是在指導你,從底層實現 STL 基礎模板?有沒有想過將 String 類完善一下?譬如如何實現 c_str() 的功能?你的 String 效率與 STL 有何區別?能否超越?vector 呢?(這個很難超越)set 呢?(這個有可能)
  • 當然還有諸如 Folder 和 Message 類,實際是一個郵件管理系統的雛形,這樣的例子不勝枚舉。

所以,如果你真的認真做了習題,或是深入思考過這些題目,我覺得應該是不愁練手的。

而你表現的如此急切,倒是有點緣木求魚的感覺。

==============乾貨分割線==================

好的C++開源項目不勝枚舉,如:

  • facebook/folly · GitHub

  • TTimo/doom3.gpl · GitHub

  • https://github.com/EpicGames/UnrealEngine

  • v8/v8 · GitHub

  • qtproject/qtbase · GitHub

  • ideawu/ssdb · GitHub

  • zeromq/libzmq · GitHub

  • miloyip/rapidjson · GitHub

都很值得去研究學習,但你是否能夠一口去吃這些胖子,深表懷疑。大多數人,應該是頭暈眼花,不明所以的。

自己想做點小項目練手,我也可以提供一些思路:

  • 高精度計時器:參考 QueryPerformanceCounter function (Windows)
  • STL 容器類:上面提到了。
  • 自己實現智能指針:其實還是習題的範圍。
  • 實現類似 Qt 底層的信號槽
  • 實現一個
    mini GUI
  • 實現一個類似 http://alleg.sourceforge.net/ 或 SDL 這樣的遊戲引擎,並做一個小遊戲。
  • 實現一個簡易的序列化框架,想想如何將對象存取於磁碟上。
  • 有人抱怨 c/c++有什麼非常好用的字元處理庫嗎? ,你來實現一個 std::string 的工具庫
  • 將上面這些東西,都封裝成 dll/so/lib 的形式,供自己或更多人日後使用。

經歷以上過程的洗禮,C++ 能忘就忘了吧,沒關係~


libcxx


推薦我開發的幾個項目:

SSDB: GitHub - ideawu/ssdb: A fast NoSQL database, an alternative to Redis - 一個應用非常廣泛的NoSQL資料庫, 被國內外各大公司和創業團隊使用. 代碼量1萬行. 前面有人推薦過.

iComet: GitHub - ideawu/icomet: A C1000K comet/push server built with C++, for web and mobile app - 一個消息推送伺服器, 可用於實現網頁版或者手機版的IM(聊天)軟體的後端伺服器. 代碼量2千行.

sim: GitHub - ideawu/sim: Simple C++ network server framework - 一個簡單C++網路伺服器端開發框架.


之前也是在網上找一些簡單的小項目練手,根據各路大神的建議,先後嘗試了:

閱讀LevelDB源碼,實現一個超輕量型Http Server,構造正則表達式引擎等等。。

放棄!

一定要對自己目前的能力有個認知,於是把大一的課設《簡易通訊錄》自己再做了一遍,然後去寫了個簡單的俄羅斯方塊。三四天時間比之前收穫多很多!

俄羅斯方塊的代碼:

https://github.com/jwzh222/my_tetris-


推薦閱讀:

關於C++宏定義的一個疑問?
我們用的計算機語言底層都是用什麼寫的?
上溢後,結果為什麼可以用 (原值%對應數據類型最大值) 求出?
在Visual Studio開發c++程序時,怎樣使用和管理第三方的開源庫?
C++項目怎麼適用不同的linux系統?

TAG:開源項目 | C | CC | C應用 | CPrimer |