15個C++項目列表
實驗樓上有很多C++的實戰項目,從簡單到進階,學習每個項目都可以掌握相應的知識點。
- 如果你還是C++新手的話,那麼這個C++的項目列表你可以拿去練手實戰開發,畢竟學編程動手實踐是少不了的!
- 如果你不知道C++可以用來做哪些項目,可以應用在哪些地方,那麼,這個項目列表拿去吧,可以看看C++可以做什麼!
C++項目列表:
1、C++ 實現太陽系行星系統
項目使用 C++實現 OpenGL GLUT 實現一個簡單的太陽系行星系統,將涉及一些三維圖形技術的數學基礎、OpenGL 里的三維坐標系、OpenGL 里的光照模型、GLUT 的鍵盤事件處理。
項目涉及的知識點:
- C++ 語言基礎
- 基本的 Makefile
- 基本的 OOP 編程思想
- OpenGL GLUT 的結構基本使用

2、C++實現運動目標的追蹤
這個項目是在前面一個項目的後續項目,利用 OpenCV 來實現對視頻中動態物體的追蹤。
項目涉及的知識點:
- C++ 語言基礎
- g++ 的使用
- 圖像基礎
- OpenCV 在圖像及視頻中的應用
- Meanshift 和 Camshift 演算法
本次實驗要實現的效果是追蹤太陽系中運動的行星(圖中選擇了淺綠顏色軌道上的土星,可以看到追蹤的目標被紅色的橢圓圈住):

3、C++ 實現銀行排隊服務模擬
項目使用 C++對銀行排隊服務進行模擬,以事件驅動為核心思想,手動實現模板鏈式隊列、隨機數產生器等內容,進而學習概率編程等知識。作為可選進階,這個模型同時還能稍加修改的應用到 CPU 資源爭奪模型中。
項目涉及知識點:
- OOP 編程思想
- std::rand() 函數原理
- 概率編程
- 排隊理論
- 鏈式隊列數據結構及其模板實現
- 事件驅動的設計
- 蒙特卡洛方法
- CPU 資源爭奪模型
- 時間片輪轉調度
讓我們的程序能夠給出類似下面的結果:

4、1小時入門增強現實技術
項目利用C++,基於OpenCV實現一個將3D模型顯示在現實中的小例子,學習基於Marker的AR技術。
項目涉及知識點:
- C++ 語言基礎語法
- AR 基本概念
- 基於 Marker 的 AR 技術
- OpenCV 程序開發

一個踩著魔鬼的步伐的漆黑的食人魔
5、100 行 C++ 代碼實現線程池
為了追求性能,在伺服器開發中我們經常要面臨大量線程任務之間的調度和管理,該項目使用 C++ 及大量 C++11新特性設計並實現一個線程池庫。
項目涉及知識點:
- C++11 標準庫特性
- C++11 語言特性
- Lambda 表達式
- 尾置返回類型
- 線程池模型
- 測試驅動開發思想
編譯代碼並執行,一個可能的結果會向下面這樣(顯然,你的結果幾乎不可能和這裡的結果完全一樣):

6、C++ 開發 Web 服務框架
伺服器開發中 Web 服務是一個基本的代碼單元,將服務端的請求和響應部分的邏輯抽象出來形成框架,能夠做到最高級別的框架級代碼復用。項目將綜合使用 C++11 及 Boost 中的 Asio 實現 HTTP 和 HTTPS 的伺服器框架。
項目涉及的知識點:
- C++基本知識
- 面向對象
- 模板
- 命名空間
- 常用 IO 庫
- C++11 相關
- Boost Asio 相關
過程截圖一:

7、C++ 打造 Markdown 解析器
Markdown 幾乎成為了程序員編寫文檔的標配,Markdown 的相關語法簡單,解析 Markdown 文本能夠加深日後編寫編譯器中詞法分析的理解,本項目將使用 C++ 實現 Markdown 解析器,並將解析的內容生成為 HTML。
項目涉及知識點:
- 詞法分析技術
- 語法樹
- DFS 深度優先搜索
- C++11
- 使用指針進行字元流處理

8、C++ 實現高性能內存池
在 C/C++ 中,內存管理是一個非常棘手的問題,我們在編寫一個程序的時候幾乎不可避免的要遇到內存的分配邏輯,這時候隨之而來的有這樣一些問題:是否有足夠的內存可供分配? 分配失敗了怎麼辦? 如何管理自身的內存使用情況? 等等一系列問題。
該項目實現一個內存池,並使用一個棧結構來測試我們的內存池提供的分配性能。最終,我們要實現的內存池在棧結構中的性能,要遠高於使用 std::allocator 和 std::vector。
項目涉及的知識點:
- C++ 中的內存分配器 std::allocator
- 內存池技術
- 手動實現模板鏈式棧
- 鏈式棧和列表棧的性能比較

9、C++ 實現簡易 Docker 容器
Docker 的本質是使用 LXC 實現類似虛擬機的功能,進而節省的硬體資源提供給用戶更多的計算資源。本項目將 C++ 與 Linux 的 Namespace 及 Control Group 技術相結合,實現一個簡易 Docker 容器。
項目涉及知識點:
- Linux 相關知識
- Namespace
- Control Group
- Linux 系統調用
- C++
- namespace
- lambda expression
- C/C++ 混合編譯
最後我們將為容器實現下面這些功能:
- 獨立的文件系統
- 網路訪問的支持
- 容器資源的限制

10、C++ 實現內存泄露檢查器
內存泄漏一直是 C++ 中比較令人頭大的問題, 即便是很有經驗的 C++程序員有時候也難免因為疏忽而寫出導致內存泄漏的代碼。除了基本的申請過的內存未釋放外,還存在諸如異常分支導致的內存泄漏等等。本項目將使用 C++ 實現一個內存泄漏檢查器。
項目涉及的知識點:
- new 操作符重載
- __FILE__、__LINE__ 預定義宏
- 頭文件中的靜態變數
- std::shared_ptr 智能指針

11、C++ 使用 Crypto++ 庫實現常用的加密演算法
該項目利用 Cryto++庫 對字元串進行 AES 加密和解密,RSA 加密和解密,生成 MD5 值。其中主要用到了 Crypto++ 庫,這是開源的C++數據加密演算法庫,支持如下演算法:RSA、MD5、DES、AES、SHA-256等等。
該項目涉及知識點:
- 安裝 Crypto++ 庫並檢驗
- 學習 MD5 摘要演算法
- 學習 AES 加密演算法

12、C++ 實現高性能 RTTI 庫
RTTI 是運行時類型信息的英文縮寫,C++ 本身提供了運行時類型檢查的運算符 dynamic_cast 和 typeid,然而dynamic_cast 的效率其實並不理想,需要犧牲一定性能。本項目將手動實現一個高性能 RTTI 庫。
項目涉及的知識點:
- 運行時類型檢查 dynamic_cast, typeid
- 顯式類型轉換 static_cast, const_cast, reinterpret_cast

13、c++操作 redis 實現非同步訂閱和發布
該項目操作 redis 實現非同步訂閱和發布,其中將介紹 redis 基礎知識,在linux中安裝和使用 redis ,常用的 hiredis API,並實現一個常式。
該項目涉及知識點:
- 介紹 Redis 的基礎知識
- 安裝使用 Redis
- 安裝 hiredis 庫,並編寫測試程序
- 發布訂閱模式者模式介紹
- 編寫發布者/訂閱者相關模塊
- 編寫 makefile



14、C++ 實現基數樹 radix tree
對於長整型數據的映射,如何解決 Hash 衝突和 Hash 表大小的設計是一個很頭疼的問題。radix 樹就是針對這種稀疏的長整型數據查找,能快速且節省空間地完成映射。該項目就帶你用C++實現基數樹 radix tree。
項目涉及知識點:
- 泛型
- 析構
- 運算符重載
- 雙向鏈表
- 數據結構

15、C++基於OpenCV實現實時監控和運動檢測記錄
該項目使用C++和OpenCV提供的庫函數,實現攝像頭的實時監控功能,並通過監控畫面的運動檢測選擇是否記錄視頻。監控人員可選擇輸出圖像的模式以更容易的分辨監控中的異常情況。
項目涉及知識點:
- 對攝像頭數據的捕獲
- 對捕獲到的監控幀作背景處理
- 對監控視頻做運動檢測並記錄視頻
以下幾張分別是程序在不同顯示模式下的顯示情況,你可以通過切換-mog1,-mog2和-src來自己觀察對應的效果。
以上介紹的15個項目都是用C++來實現的,所以,還在等什麼?快去動手開發吧!
推薦閱讀:
※說說 C++ 的 Concept
※[譯] C++中帶狀態元編程黑科技(二):實現常量表達式計數器
※C++模板元編程--replace_type<>
※C++模板元編程---編譯期類成員檢測
※萌新刷題(一)A + B 問題





