C++ FAQ सी ++ की सभी idiosyncrasies के बारे में एक उत्कृष्ट संसाधन है, लेकिन संभवतः यह संभवतः थोड़ा अधिक उन्नत है जो आप खोज रहे हैं - अधिकांश प्रश्न (केवल जवाब नहीं) रहस्यों को काफी अनुभवी सी ++ डेवलपर्स के लिए भी हैं ।
मुझे लगता है कि अगर आप सी ++ ट्यूटोरियल्स के लिए Google हैं, तो आप कुछ ढूंढ पाएंगे। आप असेंबली भाषा सीखने की कोशिश कर सकते हैं (या कम से कम एक माइक्रोप्रोसेसर में वास्तव में चीजें कैसे होती हैं) के रूप में त्वरित परिचय प्राप्त करना चाहते हैं, क्योंकि सी और सी ++ दोनों चीजों के तरीके में हार्डवेयर के काफी करीब हैं। यह वह जगह है जहां उनकी गति और शक्ति आती है, लेकिन यह जावा ऑफर के कुछ अच्छे गुणों की कीमत पर आता है।
मैं ऊपर दिए गए आपके विशिष्ट प्रश्नों का उत्तर देने का प्रयास कर सकता हूं, लेकिन मुझे नहीं पता कि मैं कितना अच्छा करूँगा।
हेडर फ़ाइलों और सीपीपी फ़ाइलों के बीच संबंधों को समझने की कुंजी में से एक "अनुवाद इकाई" के विचार को समझ रहा है। एक जावा क्लास फ़ाइल को अनुवाद इकाई माना जा सकता है क्योंकि यह मूल इकाई है जिसे बाइनरी रूप में संकलित किया जाता है। सी ++ में, बहुत सी सीपीपी फ़ाइल एक अनुवाद इकाई है (यदि आप अजीब सामान कर रहे हैं तो अपवाद हैं)।
एक शीर्षलेख फ़ाइल एकाधिक अनुवाद इकाइयों में शामिल की जा सकती है (और हर जगह शामिल होना चाहिए जो शीर्षलेख में परिभाषित किया गया है) का उपयोग करता है। # अंतर्निहित निर्देश शाब्दिक रूप से केवल एक टेक्स्ट प्रतिस्थापन करता है - शामिल फ़ाइल की सामग्री वर्बैटिम डाली जाती है जहां # अंतर्निहित निर्देश होता है। आप आमतौर पर हेडर फ़ाइल में परिभाषित करने के लिए अपने वर्ग इंटरफेस को परिभाषित करना चाहते हैं, और सीपीपी फ़ाइल में कार्यान्वयन करना चाहते हैं। ऐसा इसलिए है क्योंकि आप अपने कार्यान्वयन विवरण को अन्य अनुवाद इकाइयों में उजागर नहीं करना चाहते हैं जिनमें हेडर शामिल हो। सी ++ में, कक्षाओं समेत सबकुछ वास्तव में समृद्ध वस्तुएं नहीं हैं, लेकिन संकुलक का अर्थ है कि संकलक प्रत्येक अर्थ इकाई में एक ही शीर्षलेख जानकारी को संकलित करके, अर्थात् गारंटी देता है कि सभी अनुवाद इकाइयों में सभी अनुवाद इकाइयां हैं स्मृति की एक खंड का प्रतिनिधित्व करने की एक ही समझ है। संकलन समय के बाद समृद्ध डेटा की कमी के कारण, प्रतिबिंब जैसी चीजें असंभव हैं।
सी ++ बिल्ड प्रक्रिया में दूसरा चरण लिंकिंग है, जहां लिंकर सभी संकलित अनुवाद इकाइयां लेता है और एक अनुवाद इकाई में उपयोग किए जाने वाले प्रतीकों (आमतौर पर कॉल कॉल, लेकिन चर) का उपयोग करता है लेकिन वहां परिभाषित नहीं किया जाता है। इसके बाद यह एक और अनुवाद इकाई की तलाश करता है जो उस प्रतीक को परिभाषित करता है और उन्हें "लिंक" करता है, ताकि सभी विशेष कार्यों को कॉल करने वाले अनुवाद इकाई को निर्देशित किया जा सके जो इसे परिभाषित करता है।
कक्षा विधियों के मामले में, उन्हें कक्षा के उदाहरण के माध्यम से बुलाया जाना चाहिए, जो दृश्यों के पीछे सिर्फ स्मृति के टुकड़े के लिए एक सूचक है। जब संकलक इन प्रकार की विधि कॉल देखता है, तो यह उस कोड को आउटपुट करता है जो फ़ंक्शन को कॉल करता है, जो कि पहले तर्क के रूप में कार्य करने के लिए this
पॉइंटर के रूप में जाना जाता है। आपके पास ऐसे कार्य हो सकते हैं जो वर्गों से संबंधित नहीं हैं (विधियों के अनुसार, जैसा कि आपने कहा था, क्योंकि एक विधि उचित रूप से कक्षा का सदस्य कार्य है और इस प्रकार कक्षा के बिना अस्तित्व में नहीं हो सकता है) क्योंकि लिंकर के पास कक्षा की कोई अवधारणा नहीं है। यह एक अनुवाद इकाई देखेंगे जो एक फ़ंक्शन को परिभाषित करता है और दूसरा जो फ़ंक्शन को कॉल करता है और उन्हें एक साथ जोड़ता है।
यह मेरी अपेक्षा से बहुत लंबा हो गया है, और निश्चित रूप से एक ओवरम्प्लिफिकेशन है, लेकिन यह मेरे ज्ञान के सर्वोत्तम और विस्तार के स्तर के लिए सटीक है ... उम्मीद है कि इससे कुछ मदद मिलती है। कम से कम यह आपको कुछ googling के लिए एक प्रारंभिक बिंदु देना चाहिए।
संपादित करें: उत्तर देने वाले सभी के लिए धन्यवाद, सभी उत्तर उपयोगी और सूचनात्मक थे। – Whatsit
किसी भी स्थिति में किसी भी स्थिति के लिए, मुझे यह पृष्ठ बहुत उपयोगी पाया गया है, विशेष रूप से सेक्शन ए 3.3 (कक्षाएं): http://www.horstmann.com/ccj2/ccjapp3।एचटीएमएल – Whatsit