2009-06-08 92 views
5

目前我正在使用Java及其面向對象設計方面(我也使用PHP/MySQL很多)。我沒有在網絡上實現它;我只是用它來設計一般用途的程序。但是,現在我需要立即學習C,並且我對C++有興趣。我得到了C語言編程語言,有人說這是關於這個主題的最好的書。有人能告訴我什麼是最大的挑戰,除了字符串處理,我認爲編程設計的方式,以及我如何創建程序?我明白我不能上課,但這會如何特別影響我(即,我將不得不重新設計方法,並始終以難以編輯的想法來設計所有內容)?另外,從這些語言跳到C++很難嗎?大家都說這是一種非常困難的語言,但是以前的經驗會有幫助嗎?並且有了這樣的經驗加速C++難道要開始一本書嗎?從Java過渡到C然後C++?

非常感謝。

+0

我寫了很多C和ASM「回來的一天」,我不會錯過內存分配和指針一點(目前是一個C#人)。 – JohnOpincar 2009-06-08 02:48:21

+2

@John:我的看法是,使用內存分配和指針就像是在開車換擋。當您在美麗的山路上行駛時,它可能會很有趣並且令人興奮,但是在去購物中心的途中,有99%的時間都被堵在路上。我爲我當天做的一些低級別的東西感到自豪,但對於我今天做的99%的東西,這將是一種浪費。 – Uri 2009-06-08 02:50:52

回答

5

不要擔心一點。我開始用Java編程,然後轉向C++。然後我學習了x86彙編,現在我進入了C語言,然後我回來使用C++的某些功能,如對象。我甚至不久前做過一個Java項目。順序並不重要,只要你把工作放在學習這些語言上,你就會成功。

現在,你問了關於設計。我認爲這是你最喜歡的部分。在OOP中,如果你想創建在數據庫的簡單包裝,您可以創建一個對象,然後你可以建立一個繼承系統,多態函數等

在C語言中,你只是做了一個名爲sqlite_wrapper文件。 c,包含#sqlite3.h並開始編寫代碼。您將創建幾個函數,決定要發送的參數(結構和值),然後完成。

在C你沒有類,但你有文件。擁有不同的文件已經分離了邏輯。在Java中,你有文件+類來分離邏輯,這也很好。

祝你好運,玩得開心。

10

如果您習慣了面向對象,向非面嚮對象語言過渡的難度最大的部分是使用現有機制調整到「模擬對象」的後勤。在C中,這通常涉及到一個結構,然後有一堆將該結構作爲參數的函數。用C++,你可以避免這種情況。但是,過渡到C或C++的最大挑戰是要習慣指針和內存分配。毫無疑問,您最初會在引用和取消引用時犯錯,並且在您使用它們時會對C++引用感到困惑。你也無疑會導致內存泄漏或錯誤。而且,由於您正在「在線上」工作,因此崩潰不會很美。我不確定有什麼方法可以克服這些痛苦,但是可以練習。

1

像許多人說的。如果你瞭解其中的差異,這是可能的。在某些情況下,您必須以某種方式使用其他方式,您可以嘗試使用該語言進行編程,而不是使用語言編程。用結構和指向結構的指針作爲第一個參數「模擬」對象。如果你有經驗並且被迫與它一起工作,你將會學到它。

兩件事情我想推薦你:

  1. 從語言學習的基礎知識後試着去理解指針和內存處理,其中使用*,&的深刻理解。 , - >,有很重要的區別,我經常嘗試,直到程序似乎工作。這是一個非常糟糕的主意。

  2. 的你真的可以測試你的程序的良好思維方式使用調試器儘可能多地瞭解爲什麼你的程序正在運行或失敗,發生了什麼。你可以犯錯誤,永遠不會顯示出來,但是當它是重要的,你沒有他們會吃掉你

2

的時候我從Java中的第2年的Uni -level程序員(有很多去體驗其他非C語言)到C++新手約2個小時的朋友輔導。沿着「這是你如何申報一個班級,這裏是你好世界,等等」的線路。

從有到C的轉換更加痛苦,因爲C++有大部分的Java的功能(最大的一人失蹤是垃圾收集)。我建議你看看Boost(一個C++庫),尤其是智能指針。此外,花在掌握C++標準模板庫上的時間花在了時間上!

4

我想說,這將是更容易學習C++基於Java的基礎上,比C.

的基礎

加速C++不會更難,它是初學者水平的書。那裏還有很多其他的好書。在C++中進行思考可能是一個好的開始,但它可能會讓你在開始時感到很多熟悉的東西。所以,我會建議通過它,然後抓有效系列。那麼Exceptional,現代C++將會很好。

C++並不難,唯一的一點是你需要做的wuite在自己的幾件事情。正如Uri在帖子中所說的那樣,最棘手的部分可能是內存管理。事實上,它的廣闊而難以完全抓住,這可能是其艱難的原因。

This SO thread提供了C++一個很好的和重要的閱讀列表。

3

C和C++之間有很大差異。最主要的是在C++中使用面向對象的設計。還有一些細微差異,更多的是「習慣」類型的交易。以下是其中一些僅用於繪製一般圖片。

  1. 差異在動態存儲器分配。
  2. 沒有函數重載用C
  3. 沒有函數原型用C
  4. 不同的鑄造風格
  5. C中的一個更廣泛的庫++。

既然你正在從Java轉向,面向對象程序設計應該是你的一種習慣,並且轉換到C++會更容易。如果你絕對必須從C開始,那沒什麼大不了的。您仍然能夠掌握兩種語言使用的相同的一般概念。

1

由於所有的說,C是不是很辛苦,可能是一個很好的補充您的編程庫。

C當Java相比,:

  • 有指針,這可以讓你低級別訪問,並使得有趣的錯誤。
  • 語言是精益 - 功能少得多。
  • 沒有JVM來保護你,用一個很好的解決錯誤和行號的方法來保護你,有一些OS支持,但是很有限,所以你需要使用工具。
  • 沒有垃圾收集,除非你使用one,你必須自己照顧自己的記憶。

總而言之:主要問題將是調試,當涉及到內存和指針的使用時,你會遇到一些新的錯誤,你將不得不使用工具/思考來解決它,因爲沒有JVM。