2009-06-08 13 views
5

वर्तमान में मैं जावा और उसके ऑब्जेक्ट ओरिएंटेड-डिज़ाइन पहलुओं के साथ काम कर रहा हूं (मैं PHP/MySQL के साथ भी काम करता हूं)। मैं इसे वेब पर लागू नहीं करता हूं; मैं इसे सामान्य प्रयोजनों के लिए प्रोग्राम तैयार करने के लिए उपयोग करता हूं। हालांकि, अब मुझे सी सीखना है, और मुझे सी ++ में रूचि है। मुझे सी प्रोग्रामिंग भाषा मिली, जो कुछ लोग कहते हैं कि इस विषय पर सबसे अच्छी किताब है। क्या कोई मुझे बता सकता है कि स्ट्रिंग हैंडलिंग को छोड़कर, प्रोग्रामिंग डिज़ाइन के बारे में सोचने के तरीके और मैं प्रोग्राम कैसे बना सकता हूं, इसके अलावा सबसे बड़ी चुनौतियों का क्या होगा? मैं समझता हूं कि मेरे पास कक्षाएं नहीं हो सकती हैं, लेकिन यह मुझे विशेष रूप से कैसे प्रभावित करेगी (यानी मुझे विधियों को फिर से डिजाइन करना होगा और हमेशा इस विचार के साथ सब कुछ डिजाइन करना होगा कि इसे संपादित करना मुश्किल है)? साथ ही, उन भाषाओं से सी ++ की कूद मुश्किल है? हर कोई कहता है कि यह वास्तव में एक कठिन भाषा है, लेकिन क्या कुछ पिछला अनुभव मदद करेगा? और उस अनुभव के साथ त्वरित C ​​++ से शुरू होने के लिए एक पुस्तक के लिए कठिन होना चाहिए?जावा से सी और फिर सी ++ में संक्रमण?

धन्यवाद एक लाख।

+0

मैंने काफी सी और एएसएम "दिन में वापस" लिखा था और मुझे स्मृति आवंटन और पॉइंटर्स को एक बिट याद नहीं है (वर्तमान में एक सी # लड़का)। – JohnOpincar

+2

@ जॉन: मेरा विचार यह है कि स्मृति आवंटन और पॉइंटर्स के साथ काम करना स्टिक-शिफ्ट ड्राइविंग की तरह है। जब आप एक खूबसूरत पर्वत सड़क पर गाड़ी चला रहे हों तो यह मजेदार और रोमांचक हो सकता है, लेकिन 99% बार आप मॉल के रास्ते पर यातायात में फंस गए हैं। मुझे दिन में वापस आने वाली कुछ निम्न-स्तरीय चीजों पर गर्व है, लेकिन आज 99% सामान जो मैं करता हूं, वह प्रयास की बर्बादी होगी। – Uri

+0

हाँ अजीब बात यह है कि हर यूरोपीय देश छड़ी शिफ्ट चला रहा है। यह उन लोगों के साथ भी है जो सी में प्रोग्रामिंग पसंद करते हैं, वे सी ++ सी # जावा पायथन का इस्तेमाल कर सकते थे, मुझे समझ में नहीं आता क्यों। सीखने के कठिन और गहरे तरीके को छोड़कर कि आपका कंप्यूटर कैसे काम करता है – Janusz

उत्तर

5

चिंता न करें। मैंने जावा के साथ प्रोग्रामिंग शुरू की, फिर सी ++ पर चले गए। और फिर मैंने x86 असेंबली सीखी और अब मैं सी में हूं और फिर मैं वस्तुओं की तरह सी ++ की कुछ विशेषताओं का उपयोग करने के लिए वापस आया। मैंने बहुत पहले जावा परियोजना भी नहीं की थी। आदेश महत्वपूर्ण नहीं है, जब तक आप इन भाषाओं को सीखने में काम करते हैं, तो आप उनके साथ सफलता प्राप्त करेंगे।

अब, आपने डिज़ाइन के बारे में पूछा था। मुझे लगता है कि यह वह हिस्सा है जिसे आप सबसे अच्छा पसंद करेंगे। ओओपी में, यदि आप किसी डेटाबेस पर एक साधारण रैपर बनाना चाहते हैं, तो आप ऑब्जेक्ट बनायेंगे और फिर आप पॉलीमोर्फिक फ़ंक्शंस आदि के साथ एक विरासत प्रणाली स्थापित कर सकते हैं।

सी में, आप केवल sqlite_wrapper नाम की एक फ़ाइल बनायेंगे। सी, # sqlite3.h शामिल करें और आप कोड लिखना शुरू करें। आप कुछ फ़ंक्शन करेंगे, उन पैरामीटरों पर निर्णय लें जिन्हें आप भेजना चाहते हैं (संरचनाएं और मान) और आप कर चुके हैं।

सी में आपके पास कक्षाएं नहीं हैं लेकिन आपके पास FILES हैं। अलग-अलग फाइलें होने से पहले तर्क को अलग कर दिया जाता है। जावा में आपके पास तर्क को अलग करने के लिए फाइलें + कक्षाएं हैं और यह भी बहुत अच्छी है।

शुभकामनाएँ, मज़े करें।

+0

वास्तव में गहन उत्तर के लिए धन्यवाद। उदाहरण ने इसे और अधिक समझने में मदद की। – Brian

10

यदि आप ओओपी के लिए उपयोग किए जाते हैं, तो गैर-ओओ भाषा में संक्रमण का सबसे कठिन हिस्सा मौजूदा तंत्र का उपयोग करके "अनुकरण वस्तुओं" की रसद में समायोजित हो रहा है। सी में, इसमें आम तौर पर एक संरचना होती है, और फिर उस कार्य का एक गुच्छा होता है जो उस संरचना को पैरामीटर के रूप में लेता है। सी ++ के साथ, आप इससे बच सकते हैं।

हालांकि, सी या सी ++ में संक्रमण की सबसे बड़ी चुनौती पॉइंटर्स और मेमोरी आवंटन के लिए उपयोग में जा रही है। निस्संदेह आप संदर्भ और संदर्भ में गलतियां करेंगे, और जब आप उनके साथ काम करेंगे तो सी ++ संदर्भों के बारे में भ्रमित हो जाएंगे। आप निस्संदेह स्मृति लीक या त्रुटियों का कारण बनेंगे। और चूंकि आप "तार पर" काम कर रहे हैं, तो दुर्घटनाएं सुंदर नहीं होंगी। मुझे यकीन नहीं है कि इन दर्दों को दूर करने के लिए एक तरीका है लेकिन अभ्यास।

1

कई अन्य लोगों की तरह कहा। यदि आप मतभेदों को जानना चाहते हैं तो यह संभव है। कुछ बिंदुओं पर आपको कुछ बिंदुओं पर अन्य तरीकों का उपयोग करना पड़ता है, जिन्हें आप भाषा में प्रोग्राम करने की कोशिश कर सकते हैं, न कि भाषा के साथ। स्ट्रक्चर के साथ ऑब्जेक्ट्स "सिमुलेटिंग" और पहली तर्क के रूप में स्ट्रक्चर के लिए पॉइंटर। यदि आपके पास अनुभव है और इसके साथ काम करने के लिए मजबूर हैं तो आप इसे सीखेंगे।

दो बातें मैं तुम्हें अनुशंसा करना चाहते हैं:

  1. भाषा से मूल बातें सीखने के बाद, संकेत और स्मृति हैंडलिंग, जहां * उपयोग करने के लिए, & के लिए एक गहरी समझ पाने के लिए प्रयास करें। , ->, महत्वपूर्ण मतभेद हैं और जब तक प्रोग्राम काम नहीं करता तब तक मैं चारों ओर कोशिश करता था। यह एक बहुत बुरा विचार है।

  2. एक अच्छा तरीका सोचें कि आप वास्तव में अपने प्रोग्राम का परीक्षण कर सकते हैं ताकि यह समझ सके कि आपका प्रोग्राम क्यों चल रहा है या विफल रहा है और क्या हो रहा है। आप त्रुटियों को कभी नहीं दिखा सकते, लेकिन जब यह महत्वपूर्ण है और आप समय वे तुम्हें

2

खाएंगे मैं (जावा में एक 2 साल विश्वविद्यालय स्तर के प्रोग्रामर के बहुत सारे के साथ किया जा रहा से चला गया की जरूरत नहीं है सकते हैं अन्य गैर-सी जैसी भाषाओं में अनुभव) एक सी ++ नौसिखिया को किसी मित्र से लगभग 2 घंटे के शिक्षण के साथ। "इस तरह आप एक वर्ग घोषित करते हैं, यहां हैलो वर्ल्ड, इत्यादि" की रेखाओं के साथ "।

सी से + में संक्रमण अधिक दर्दनाक है, क्योंकि सी ++ में जावा की अधिकांश विशेषताएं हैं (सबसे बड़ी एक कचरा संग्रह है)। मैं सुझाव दूंगा कि आप बूस्ट (एक सी ++ लाइब्रेरी) देखें, खासकर स्मार्ट पॉइंटर्स। इसके अलावा, सी ++ मानक टेम्पलेट लाइब्रेरी को महारत हासिल करने में समय बिताया गया है!

4

मैं कहना है कि यह, जावा के आधार पर C++ में जानने के लिए सी

के आधार

त्वरित सी ++ कठिन नहीं होगा, इसकी शुरुआत स्तर किताब पर की तुलना में आसान हो जाएगा चाहते हैं। वहां कई अन्य अच्छी किताबें हैं। सी ++ में सोचना एक अच्छी शुरुआत हो सकती है, लेकिन शुरुआत में आपको बहुत सारी परिचित चीजों के साथ शुरुआत हो सकती है। तो, मैं सुझाव दूंगा कि बस इसके माध्यम से जाएं, और फिर प्रभावी श्रृंखला को पकड़ें। फिर असाधारण, आधुनिक सी ++ जाने के लिए अच्छा होगा।

सी ++ मुश्किल नहीं है, केवल एक चीज है कि आपको कुछ चीजों को अपने आप में करने की ज़रूरत है। उरी ने अपनी पोस्ट में कहा, सबसे मुश्किल हिस्सा स्मृति प्रबंधन हो सकता है। वास्तव में इसकी विशाल और पूरी तरह से पकड़ना मुश्किल है, और यह कारण कठिन हो सकता है।

This SO thread सी ++ के लिए एक अच्छी और महत्वपूर्ण रीडिंग सूची प्रदान करता है।

3

सी और सी ++ के बीच काफी अंतर हैं। प्रमुख एक सी ++ में ऑब्जेक्ट उन्मुख डिजाइन का उपयोग है। यहां तक ​​कि मामूली मतभेद भी हैं जो किसी भी चीज़ के मुकाबले 'इस्तेमाल करने के लिए' इस्तेमाल कर रहे हैं। उनमें से कुछ सिर्फ एक सामान्य तस्वीर पेंट करने के लिए है।

  1. गतिशील स्मृति आवंटन में अंतर।
  2. कोई समारोह
  3. विभिन्न कास्टिंग शैलियों
  4. सी में एक और अधिक विस्तृत पुस्तकालय C++ में सी
  5. कोई समारोह प्रोटोटाइप में अधिक भार।

चूंकि आप जावा से आगे बढ़ रहे हैं, ओओ प्रोग्रामिंग आपके लिए एक आदत होनी चाहिए और सी ++ में संक्रमण करना आसान होगा। अगर आपको बिल्कुल सी से शुरुआत करना है, तो यह कोई बड़ा सौदा नहीं है। आप अभी भी दोनों भाषाओं में उपयोग की जाने वाली सामान्य अवधारणाओं को समझने में सक्षम होने जा रहे हैं।

1

जैसा कि सभी ने कहा, सी बहुत कठिन नहीं है, और आपके प्रोग्रामिंग शस्त्रागार में एक अच्छा जोड़ा हो सकता है।

सी जब जावा की तुलना में:

  • संकेत दिए गए हैं, यह आप के स्तर तक पहुँचता है कम की अनुमति देता है, और दिलचस्प कीड़े बनाता है।
  • भाषा दुबला है - बहुत कम सुविधाएं हैं।
  • त्रुटि और रेखा संख्या बताते हुए आपको एक अच्छा फेंकने के लिए कोई JVM नहीं है, कुछ ओएस समर्थन है, लेकिन बहुत सीमित है, इसलिए आपको टूल का उपयोग करने की आवश्यकता होगी।
  • कोई कचरा संग्रह नहीं है, जब तक आप one का उपयोग नहीं करेंगे, आपको अपनी याददाश्त का ख्याल रखना होगा।

यह निष्कर्ष निकालने के लिए ऊपर: मुख्य मुद्दा डिबगिंग किया जाएगा, आप कुछ नए कीड़े का सामना करना पड़ेगा, जब यह स्मृति और संकेत के उपयोग की बात आती है, और आप इसे हल करने के लिए/उपकरणों का उपयोग करने के लिए कठिन लगता होगा, क्योंकि कोई JVM नहीं है।

संबंधित मुद्दे