2009-03-02 29 views
6

我知道C++是一門非常複雜的語言,需要多年的練習才能掌握。你會推薦什麼樣的項目來加快C++的速度

考慮到這一點,你是否知道一個測試所有C++主要特性(繼承,指針,內存管理等)的小項目(大約1k的loc)。

事情是我是一個Java/Python程序員,我真的很想學習C++,所以我一直在研究C++一段時間,但還沒有測試過我在小練習之外所學的知識。

我想把所有這些知識付諸實踐。

回答

11

單獨這樣做,你會獲得許多有害的習慣。在C++開發和培訓的指導下,與擁有較高的競爭力的公司進行實習非常好。

C++就像一個沒有安全別針的手榴彈 - 看起來很酷,你聽說所有「真正的專業人士」都使用它,但你不知道什麼時候會爆炸。大量的功能,可以用於善良或邪惡,而不知道它是真正的好還是壞。這就是爲什麼指導是必須的。

+0

-1他也可以在工作場所學習壞習慣。如果他已經有工作了會怎樣?他沒有理由不能自己學習。 – 2009-03-02 15:38:31

+0

+1從這裏。當然,你也可以在工作場所學習壞習慣,但至少在那裏也會遇到好習慣。如果您不知道該語言的微妙之處,並自行編寫代碼,那麼您根本不會注意到發生的錯誤。 – jalf 2009-03-02 15:42:27

+0

通過編寫代碼和測試它來學習C++是1)不良習慣和2)錯誤代碼的祕訣。在更緊密定義的語言中,它可以很好地工作,您可以假設如果您的代碼編譯完成,它是明確定義的並且合法。在C++中,程序員需要能夠自己發現這些問題 – jalf 2009-03-02 15:44:35

3

我建議創建一個基於文本的遊戲。這真的幫助我鞏固了我的C++。不要花太長時間,你可以鍛鍊你想要的所有功能。自己想出遊戲。這樣更有趣。

另一個好主意是編寫一個簡單的數學庫,支持向量矩陣等。 但是對於今天的圖書館來說,這只是學術用途。

2

取決於您想要在哪個區域工作。但是,在少於1000行代碼的情況下,沒有任何工作值得正確進行。

如果你打算寫遊戲,然後嘗試寫一個俄羅斯方塊克隆。

如果你認爲你會使用套接字等,然後寫一個簡單的聊天/ IRC客戶端將有所幫助。

你是否有一個特定的癢,需要劃傷?你最後一次認爲「這很糟糕,我可以做得更好?」是什麼時候?你能做得更好嗎?

8

內存管理器。這應該讓你思考:(!當然)

  • 自由存儲管理
  • 指針
  • 繼承(你會希望你的驅動程序代碼中使用這個)
  • 模板(另一種方式來傳遞管理器周圍 - 驅動程序#2)
  • 設計用戶定義的數據結構(存儲塊)
  • 有效使用標準容器(一個或多個)
  • 算法(噸的o移動,找出空塊,碎片整理)
5

我不確定任何測試全部的主要特徵。有很多,有些很少一起使用(模板和虛擬功能浮現在腦海。這兩種實現多態性的一種形式,所以你經常使用一個或另一個根據您的需要。)

,它會在所有重要的功能觸摸一個合適的項目可能是一個顯然簡單的就像寫一個正確的容器類,類似於std :: vector或std :: list。確保異常安全性,迭代器有效性,所有操作的適當時間複雜性以及標準中指定的每個其他要求。

這樣做的問題,以及大多數其他項目,是你不會真正知道什麼時候你就大功告成了。製作可調整大小的陣列可能需要50行代碼,並且需要20分鐘的時間。然後一個初學者會認爲他已經完成了。使其異常安全需要您能夠發現異常情況下類可能會被拋入不一致狀態的所有地方。

這是C++的一種常見問題。 認爲很容易,編譯器肯定不會通知您已忘記處理的方面。所以你可能認爲你的代碼是完美的,但它會崩潰的各種奇怪的特殊情況。

正如銳齒說,換作亂作爲C++語言,對自己編寫代碼是有風險的。很容易陷入「我寫了一些代碼,它編譯並且似乎運行的陷阱」,因此它是正確的。 當然,您可以在此處或其他網站上發佈您的代碼以供審閱,也可以僅通過閱讀用於實際高質量C++代碼的文檔來補充您的代碼(大多數增強庫往往具有全面的文檔,指定了各種設計決策的基本原理,以及如何安全地處理所有傾向於在C突然出現++怪異的特殊情況。C++標準本身就是一個極好的資源,當然,在這兩種情況下,這些可以幫助你確定看出來有什麼問題)

4

當我學習C++時,我使用它編寫自己的語言來編寫巨大洞穴風格的冒險。像大多數計算機語言一樣,它從未看到過白天,但它確實教會了我很多關於C++的知識。

無論你選擇,以避免學習C++時就是GUI編程,這是一個陷阱,這將耗盡所有的進取心,可能教你壞C++習慣的過程。

1

我會推薦寫一個俄羅斯方塊克隆。 你可以學習很多C++概念,學習像SDL這樣的2D庫,甚至可以學習OpenGL throgh SDL。

這是一件好事,有視覺效果,並在它結束時,你可以發揮它的項目。

6

Effective C++More Effective C++

除此之外,選擇你想要寫一個(小?)個人項目,並做它在C++。您不會通過閱讀1000行項目來學習C++。

0

一種交互式世界: 矩陣,其中每個位置可以是一個空隙或存在。 存在是一些具有幾個屬性的東西:年齡,剩餘時間,性別,neigbor連接等。可以進行一些互動:打架,有性和孩子,有友誼等等。有些人根據他們的父親有特殊技能(繼承交易)...就像殺死能力,製作食物的能力等...... 這些互動和技能的可能結果是自我屬性的變化,或者創造後代(如果可能),或者改變neigbor屬性。

在每次迭代時,從控制檯上的符號/數字(取決於屬性等)打印矩陣,從聖經迭代0開始(您選擇的初始條件......您是上帝)。

現在,你有一些真實的生活模式模擬器,並學會了一些繼承,polimorfism,虛函數的類實例化等

0

我會建議一個簡單的文本編輯器將是一個合理的目標。

這是一個問題域,你有一個很好的把握。

您有內存管理問題,庫類重用問題(stl/curses?),指針問題以及可以使用派生類的許多選項。

對於多態性,也許可以讓編輯器從鍵盤讀取數據,或從文本文件中讀取命令。

還有一個很好的....處理文件。

你不必跨平臺它。你不必開源。你不必展示給任何人。你甚至不需要完成它。它可以是一個適合你的運動。

1

似乎有是兩個主題,從答案來:

  1. 你需要選擇,可能爲了獲得項目的真實經驗,涉及超過1K LOC的項目。

  2. 您還需要與經驗豐富的C++開發人員配對,他們可以幫助您思考問題並避免與該語言相關的陷阱。

你可以通過sourceforge.net的swing來註冊這兩個,並註冊以幫助現有的C++項目。只要你不介意你的代碼是開源的,你應該能夠找到一個現有的項目來向經驗豐富的開發人員學習,他們可以通過檢查你的代碼和提供指導來幫助你。

3

爲了學習C++,看看很多寫得很好的C++代碼是很有用的。 我認爲Qt庫對此非常好,所以我建議:編寫一個Qt應用程序。

看看他們如何使用C++並以類似的方式創建自己的圖形組件。

想法: - 連接到其中一個財務網站和刮擦歷史數據的股票圖表查看器小部件。 - 簡單的Excel,如電子表格小部件。

0

如果你從書中學習,它必須有大量經過深思熟慮的練習,你可以實施和學習。還請查看大學網站和他們的C++實驗室/作業。