學習完 C++ Primer 能做什麼項目練手或者看什麼好的開源項目源碼?
12-31
很著急找點好的源碼看和好的項目練手,怕不用很容易忘啊!
學習完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系統?