C # डेवलपर्स के लिए C ++


24

मुझे पता है कि C # बहुत अच्छी तरह से (स्व-सिखाया गया है, दुख की बात है) और विंडोज एप्लिकेशन के लिए कुछ C ++ प्रोग्रामिंग करने की आवश्यकता है। मैं C ++ डेवलपर्स के लिए C # सीखने के लिए एक टन की जानकारी प्राप्त करने में सक्षम रहा हूं, लेकिन जब आप पहले से ही C # जानते हैं, तो C ++ सीखने में ज्यादा सक्षम नहीं हैं। किसी को भी मूल बातें का एक अच्छा ठहरनेवाला भर आया है?

MSDN की तुलना है लेकिन यह बहुत गहराई में नहीं है।

मैं कई स्रोतों को एक साथ जोड़ सकता हूं, लेकिन लगा कि कुछ बाहर है - मैं अभी इसे नहीं ढूंढ सकता। आपकी सहायता के लिए धन्यवाद।


27
क्यों "दुखी"? अपने आप को इस तरह नीचे मत डालो। मैं एक सी # डेवलपर कि पता नहीं है नहीं है आत्म सिखाया। जिनमें से कई अद्भुत डेवलपर्स हैं।
स्टीवन एवर्स

6
@SnOrfus - मुख्य रूप से शिक्षाविद इसे तर्कहीन छद्म राजनीतिक कारणों से दूर कर रहे हैं।
री मियासाका

5
मेरी सलाह का पहला शब्द C # के संदर्भ में C ++ सीखने की कोशिश नहीं है। क्योंकि C # C ++ नहीं है और C ++ C # नहीं है। यह एक बेवकूफी भरा बयान हो सकता है, लेकिन C # पॉइंटर्स को गलत करना मुश्किल बना देता है, और इसका बहुत आसान C ++ में उन्हें गलत करना है, यहां तक ​​कि उन टूल्स के साथ भी जो इसे वास्तविक रूप से आसान बनाते हैं। मैं जोड़ूंगा कि ऐसी कई चीजें हैं जो दो भाषाओं में साझा हैं। यह मूल रूप से यह कहने जैसा है कि एक सेब और नारंगी दोनों एक पेड़ पर उगाए जाते हैं और उनमें बीज होते हैं और इस प्रकार वे फल होते हैं।
रामहाउंड

2
@ReiMiyasaka, इसके विपरीत नहीं कि C # डेवलपर VB .NET को कैसे देखते हैं।
22

1
@Kyralessa जो दुर्भाग्यपूर्ण भी है। मुझे लगता है कि यह इतना राजनैतिक मुद्दा नहीं है क्योंकि यह वीबी.नेट डेमोग्राफिक के प्रति कृपालु है - क्योंकि अधिकांश सी # शुरुआती अपनाने वालों की सी / सी ++ पृष्ठभूमि है। मेरे स्कूल ने शुरुआती पाठ्यक्रमों के लिए VB.NET का उपयोग किया है। उन्हें लगता है कि VB.NET एक खिलौना है, और इसलिए C # के रूप में छात्रों के दिमाग को भ्रष्ट नहीं करना चाहिए।
री मियासाका

जवाबों:


10

जावा डेवलपर्स के लिए C ++ पर यह धागा बहुत समान है और उपयोगी होना चाहिए, विशेष रूप से मार्क बायर्स का पद:

ये किताबें पढ़ें:

संभवतः ध्यान रखने योग्य सबसे महत्वपूर्ण बात यह है कि C # / Java और C ++ के बीच मेमोरी मैनेजमेंट तकनीकों के अंतर को समझना चाहिए

मेरा एक प्रोफेसर एक जावा बैकग्राउंड से आया था और उसने यह कहते हुए एक परिचयात्मक C ++ पाठ्यक्रम पढ़ाया। उन्होंने जो कुछ भी समझाया उससे किसी को कोई मतलब नहीं था। उसकी हर जगह मेमोरी लीक हो गई थी। उनका सूचक अंकगणित भयानक था। वह कभी भी पाठ्यक्रम के ओओपी भाग (धन्यवाद भगवान) के लिए नहीं मिला। वस्तुतः उन्होंने जो कुछ भी प्रदर्शित किया वह संकलित होगा। उसे समझ नहीं आया कि char[]प्रहरी की जरूरत है \0। उसकी तरह खत्म मत करो।


4
अफ़सोस की बात है कि सी ++ में कोई भी नहीं का उपयोग करता है char[]तो , है ना?
डेडएमजी

5
@DeadMG मैं काफी हद तक आपकी बात नहीं देख सकता। सिर्फ इसलिए char[]कि C ++ में शायद ही कभी इसका इस्तेमाल किया जाता है, इसका मतलब यह नहीं है कि इसे पढ़ाया नहीं जाता या इसे पढ़ाया नहीं जाना चाहिए। char[]यह जानना अभी भी महत्वपूर्ण है क्योंकि C ++ C का सुपरसेट है, और यह अत्यावश्यक है कि इसे सही तरीके से समझा जाए तो इसे सीखा जा सकता है।
री मियासाका

7
हाँ-एक बहुत ही, बहुत लंबे समय के बाद वे भाषा के हर दूसरे पहलू के बारे में महारत हासिल कर चुके हैं। मैं नए छात्रों को आंशिक टेम्पलेट विशेषज्ञता और SFINAE सिखाता हूँ। C ++ में, आप उपयोग करते हैं std::string, और यदि आपको C API के साथ इंटरॉप करना है, तो c_str()इसके लिए यही है। उस char[]में से किसी में या पूर्ण समाप्ति से निपटने के लिए प्रोग्रामर की कोई आवश्यकता नहीं है। सी-स्टाइल स्ट्रिंग हैंडलिंग पूरी तरह से पूरी तरह से और पूरी तरह से पूरी तरह से हर संभव उपयोग के लिए पुराने सी कोड के साथ इंटरॉप को छोड़कर है, जो पूरी तरह से अच्छी तरह से नियंत्रित किया जाता है c_str()
डेडएमजैन

4
char[]सही सिखाने जैसी कोई बात नहीं है , क्योंकि सभी उपयोग char[]गलत हैं। आपका प्रोफेसर शायद बिलकुल ठीक होता अगर वह C के बजाय C ++ से अटका होता
डेडजैम

4
आप होगा सी कोड सी में प्रयोग किया जाता है कि क्या आप ++ सी लिख सकते हैं या नहीं अपने आप को, और तदनुसार, आप सी सीख रहे हैं, तो ++, आप को जानने के लिए सी जैसा कि मैंने किया है ने कहा कि जरूरत है देखते हैं, मैं नहीं है यह अनदेखी, लेकिन के तथ्य जो, BeOS और कुछ अनुसंधान OSes को छोड़कर, बिल्कुल कि के लिए सी आवश्यकता है, आप - बात है कि आम तौर पर स्कूलों C ++ पर सी और फिर कील सिखाने बाद में, क्योंकि छात्रों को ओएस डिजाइन तरह बातें सिखाने की जरूरत है ऐसा सी तार को समझने की जरूरत। फिर, तीसरी बार, अगर मेरे पास अपना रास्ता होता, तो मैं C ++ को प्रथम वर्ष के छात्रों को नहीं पढ़ाता, और आखिरी बार, यह पूरी तरह से बिंदु के अलावा होता है।
री मियासकाक

14

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


3
यह समझाता है कि वहाँ क्यों नहीं है। C ++ पर पढ़ने के बाद यह थोड़ा सा दिखाई देगा कि आप सही हैं - यह पूरी तरह से अलग दुनिया है। आपकी सहायता के लिए धन्यवाद।
मार्क विलियम्स

1
+1, आपके द्वारा C # के बारे में बहुत कम जानकारी होगी जो C ++ के लिए दूरस्थ रूप से हस्तांतरणीय है । मैंने इसे कठिन तरीके से सीखा है।
अपरेंटिसहैकर

एक त्वरित बिंदु के रूप में, मैं कहूंगा कि C ++ का बहुत कुछ है जो बुनियादी है। विशिष्ट बिंदुओं / संदर्भों और C ++ टेम्प्लेट्स आपके सिर को पहली बार स्पिन कर सकते हैं, लेकिन जब यह नीचे आता है तो अभी भी कक्षाएं हैं, coutऔर सरल लक्ष्यों को प्राप्त करने के सरल तरीके हैं
किरेन जॉनस्टोन

1
@KierenJohnstone: आप शायद "सरणी-से-पॉइंटर क्षय" और ऐसी चीजों को करने के लिए "धीमी और अपवाद-असुरक्षित तरीके" का अर्थ करते हैं।
४४ पर डेडएमजी

12
अच्छा पूरी तरह से अनपेक्षित जवाब।
dbracey

9

इसके लिए कोई आसान निर्धारण नहीं है, C ++ विशेष रूप से कठिन नहीं है, लेकिन शुरुआती लोगों के लिए यह आसान नहीं है।

मैं आपको C प्रोग्रामिंग की मूल बातें (निम्न स्तर के सामान की एक ग्राउंडिंग प्राप्त करने के लिए) पढ़ने की सलाह दूंगा, फिर स्कॉट मेयर्स की पसंद के लेखों के बाद STL सीखें। यहां आपको आरंभ करने के लिए एक है, क्योंकि यह दिखाता है कि आपको C-with-classes की तुलना में आधुनिक C ++ कैसे लिखा जाना चाहिए।


2
+1: मैं मेयर की किताबें (प्रभावी C ++ / STL श्रृंखला) प्राप्त करना चाहूंगा। मैं उन सब को मिल गया है, और वे भयानक हैं।
स्टीवन एवर्स

12
-1 के लिए reading up on C programming। मुझे लगता है कि यह अच्छे से अधिक नुकसान पहुंचाता है और इस धारणा को पुष्ट करता है कि सी और सी ++ ऐसी भाषाएं हैं जिनका एक साथ अध्ययन करने की आवश्यकता है।
सेबस्टियनजिगर 6

2
@sebastiangeiger: आप इस बिंदु को याद करते हैं कि जब किसी को मौजूदा वास्तविक दुनिया सी ++ अनुप्रयोगों के साथ काम करना होता है, तो आपको अक्सर सी-जैसे निर्माणों से निपटना होगा। इसलिए +1, कम से कम अपने डाउनवोट को खत्म करने के लिए।
डॉक्टर ब्राउन

5
@DocBrown हो सकता है, लेकिन मैं अभी उन C ++ विरासत प्रोजेक्ट्स में से एक पर हूं और मैं बता सकता हूं कि मेरे पूर्ववर्ती मुख्य रूप से सिर्फ C प्रोग्रामर थे जो अपने स्रोत फ़ाइलों को * .cpp के रूप में सहेजते थे। मैंने पाया कि मैं बहुत कम deleteऔर सी सरणियों और अन्य चीजों का उपयोग कर रहा हूं जो सी ++ में हतोत्साहित किए गए हैं, जो कि मैंने सी। सी। का स्पष्ट रूप से अध्ययन नहीं करने का श्रेय दिया है। सी अपेक्षाकृत अपेक्षाकृत सरल है, आप बहुत जल्दी पता लगा सकते हैं कि कोड क्या करता है।
सेबस्टियनजिगर 7

3
@ जीबीजैनब: एसटीएल के बारे में कुछ भी नहीं है, जो जानने की आवश्यकता है mallocऔर free। एक महान C ++ देव अंततः उनके बारे में जानना चाहते हैं। उनके साथ शुरू करना पूरी तरह से एक अलग चीज है।
डेडएमजी

7

मुझे यकीन नहीं है कि अगर आप अभी भी सामग्री की तलाश में हैं, तो मुझे यह लेख कुछ महीने पहले मिला। यह एक पुस्तक नहीं है (केवल 53 पृष्ठ)। परिचय यह सब कहता है:

This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++

http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx

और एक अपडेट पोस्ट भी है:

http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx

हैप्पी लर्निंग :)


हालांकि इस दस्तावेज़ का उपयोग करते समय बहुत सावधान रहें, यह बहुत ही Microsoft केंद्रित तरीके से C ++ दिखाता है (यह भी ऐसा कहता है)। यह C ++ 03 और C ++ 11 सुविधाओं के बीच अंतर नहीं करता है, और कभी-कभी पसंदीदा समाधान के रूप में गैर मानक एक्सटेंशन भी दिखाता है। यदि आप उस मार्गदर्शिका का पालन करते हैं तो आप अत्यधिक महत्वहीन कोड के साथ समाप्त हो जाएंगे।
फैबियो फ्रैकासी

4
  • स्मृति प्रबंधन के लिए बाहर देखो। C # के विपरीत C ++ में पॉइंटर्स और संदर्भ कैसे काम करते हैं, इस पर स्पष्ट विचार प्राप्त करें। इसके अलावा, RAII, मैनुअल मेमोरी मैनेजमेंट और स्मार्ट पॉइंटर्स।
  • टेम्प्लेट और जेनरिक समान दिखते हैं लेकिन अलग-अलग जानवर हैं। टेम्प्लेट कैसे काम करते हैं, इसके इन्टर्नल को जानें।
  • कुछ छोटे लेकिन आकर्षक वाक्यविन्यास अंतर हैं। उन्हें जानें।
  • आपको .net BCL के बजाय STL की आदत है। LINQ की लत होने पर आप कुछ अच्छे बिट्स को मिस कर सकते हैं।
  • C ++ और C # के बीच कुछ मूलभूत डिज़ाइन अंतर हैं। इसलिए, आप केवल एक विचार को पोर्ट नहीं कर सकते। सी ++ के साथ आप जो भी निर्माण करते हैं, आपको खरोंच से डिजाइन करना होगा।
  • सौभाग्य

1

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


1

मैं रोसेटा कोड में जाने और दोनों की तुलना करने की सलाह दूंगा। जब आप वहां हों तो C ++ मुहावरों की एक कड़ी को संभाल कर रखें और उन्हें देखने का प्रयास करें। फिर पॉइंटर / रेफरेंस / मेमोरी / डिस्ट्रक्टर रियलम पर कुछ समय व्यतीत करें। उसके बाद प्रीप्रोसेसर के बारे में जानें - यह वास्तव में आपका दोस्त हो सकता है जब यह बदसूरत छिपाने के लिए आता है, तो मैं इसे याद करता हूं। अंत में, एसटीएल।


1

इसलिए, लगभग एक साल पहले मैं आपके समान नाव में था: सी # देव को पढ़ाया गया था जिसने सी ++ सीखने की आवश्यकता महसूस की। दी, मैंने कई बार रोका और शुरू किया। अपने तीसरे प्रयास पर, मैं अंत में इसके माध्यम से अटक गया।

यह समझना अनिवार्य है कि, C ++ और C # कार्यप्रणाली के संदर्भ में, आप संभवतः समझने में बहुत समय व्यतीत करेंगे कि बिंदुओं और संदर्भों के माध्यम से डेटा हेरफेर के तरीकों का वास्तव में क्या मतलब है, साथ ही कब और कैसे उन्हें परिस्थितियों को देखते हुए उपयोग करना है।

C ++ के बारे में अच्छी बात यह है कि ऑब्जेक्ट स्टैक आवंटन अधिकांश भाग के लिए काफी सरल है, और आपको इस तरह से ऑब्जेक्ट आवंटित करना चाहिए, यदि आपका प्रोग्राम इस पद्धति के तहत निर्दिष्ट आवश्यकताओं को पूरा करेगा। अन्यथा, आप गति, दक्षता और त्वरित सफाई के लिए संकेत पर भरोसा करते हैं। मैं इसे पढ़ने की सलाह देता हूं: http://www.parashift.com/c++-faq-lite/ क्योंकि यह आपको बहुत सारी तकनीकी समझ देगा कि C ++ हूड के तहत कैसे काम करता है।

मैं आपको एक उदाहरण देता हूं:

C ++ में इस निर्माणकर्ता के कार्यान्वयन को "इनिशियलाइज़ेशन लिस्ट" के रूप में जाना जाता है, जो एक कंस्ट्रक्टर के शरीर में क्लास के सदस्यों को इनिशियलाइज़ करने से अलग होता है। क्यूं कर? क्योंकि जब तक टाइप किया जा रहा है आदिम है, संकलक वास्तव में ctor की बॉडी में आवंटित किए जाने पर बनाई गई ऑब्जेक्ट की कई, और अनावश्यक प्रतियाँ बनाएगा । यह संभावित रूप से प्रदर्शन को कम कर सकता है, यह कंपाइलर के साथ-साथ ऐप की बढ़ी हुई आवश्यकताओं पर निर्भर करता है।

जानिए एक प्रतिनिधि क्या है? खैर, C ++ में इसे एक फ़ंक्शन पॉइंटर के रूप में जाना जाता है । यह भाषा पहली बार में मास्टर करने के लिए काफी कठिन है, लेकिन अगर आप भयानक होना चाहते हैं ... यह निश्चित रूप से आवश्यक है।

सी # आसान है ... बहुत आसान है।


C # डेलिगेट्स और c फंक्शन पॉइंटर्स काफी अलग हैं। एक प्रतिनिधि एक फ़ंक्शन पॉइंटर की तुलना में C ++ में एक फ़नकार के करीब है।
15In में

-2

मेरा विश्वास करो, सी ++ पर एक अच्छी किताब उठाओ (बहुत अधिक हैं, बस एक खोज करें) और सीखना शुरू करें ...


1
BTW, पहले कुछ C सीखना (संकेत, सरणियाँ, संरचना) अच्छा होगा
मुहम्मद Hewedy

7
C ++ से पहले C सीखना आपको वापस पाषाण युग में वापस लाएगा। आजकल, हम C ++ में बहुत कम ही सरणियों और बिंदुओं का उपयोग करते हैं। भाषा उनसे बहुत पहले विकसित हो चुकी है।
fredoverflow

7
@ मुहम्मद: बाकी सब गति, सुरक्षा, रखरखाव में आसानी पसंद करते हैं।
DeadMG

3
@ डीपीडी: खैर, कई पेशेवर सी ++ प्रोग्रामर, जिनमें बज़्ने स्ट्रॉस्ट्रुप (भाषा के आविष्कारक) शामिल हैं, आपसे असहमत हैं। उनकी नवीनतम पुस्तक शुरू से ही वस्तुओं और टेम्पलेट्स का उपयोग करना सिखाती है, जबकि सरणियों और संकेत अध्याय 17 (पृष्ठ 500 और कुछ) से पहले बिल्कुल भी बात नहीं की जाती है।
fredoverflow

2
@DeadMG। हो सकता है, लेकिन आप C-> C ++ विकास को वापस नहीं कर सकते। यदि आप C ++ के C भाग से घृणा करते हैं तो Java या C # के लिए जाएं। व्यक्तिगत रूप से, मैंने पाया कि C ++ में जाने से पहले C में पॉइंटर्स और सरणियों पर ध्यान केंद्रित करने से मुझे मेरे करियर में काफी मदद मिली। निश्चित रूप से, आप उनके बिना एक पूरे आवेदन को कोड कर सकते हैं लेकिन यदि आप बहुरूपता के लाभ चाहते हैं तो आपको संकेत जानने की आवश्यकता है। पॉइंटर्स के बिना कितने महत्वपूर्ण GoF पैटर्न लागू किए जा सकते हैं? यह मेरे दोस्तों के लिए वही था जो सी। का अध्ययन करते समय "कठिन" भागों से बचते थे। उनमें से अधिकांश को बहुरूपता को समझना मुश्किल था।
डीपीडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.