C.++ में प्रोग्रामिंग(programming) हम मॉड्यूल(module) 01 पर जारी रखेंगे। C. का पुनर्पूंजीकरण यह तीसरा भाग है। पहले दो भागों में हमने डेटा(data) प्रकार, चर(variables), भाव, कथन के बारे में बात की है। और, दूसरे भाग में हमने विभिन्न व्युत्पन्न प्रकारों(derived types), सरणियों, स्ट्रक्चर(structure), संघ और पोइंटर(pointer) के बारे में बात की है। स्पॉट में, हम सी के मूल मॉड्यूलर अवधारणा के साथ शुरू करेंगे, जो एक फ़ंक्शन(function) है। इसलिए, जैसा कि आप सभी जानते हैं कि एक फ़ंक्शन(function) कम्प्यूटेशन का एक विशिष्ट फंकशनस(functions) करता है। एक फ़ंक्शन(function) ऐसा है जिसे ब्लैक बॉक्स(black box) के रूप में माना जा सकता है, जो कई मापदंडों को ले सकता है और आपको एक परिणाम देगा। अब, जबकि आम तौर पर हम एक या अधिक मापदंडों को लेने के लिए फ़ंक्शन(function) की अपेक्षा करते हैं, यह संभव है कि आप एक फ़ंक्शन(function) लिखें जो कोई पैरामीटर(parameter) नहीं लेता है। और, यह विशिष्ट है कि यह आपको गणना के अंत में एक मूल्य देता है; हम कहते हैं कि यह एक परिणाम देता है। लेकिन, यह भी संभव है कि इसका कोई परिणाम न हो। किसी फ़ंक्शन(function) के पैरामीटर(parameter) की संख्या; प्रत्येक पैरामीटर(parameter) को तर्क(argument) भी कहा जाता है, हमारे पास एक प्रकार होगा। और, यदि हम उस प्रकार को निर्दिष्ट नहीं करना चाहते हैं जो हम वोइड(void) का उपयोग कर सकते हैं। रिटर्न में भी एक प्रकार वोइड(void) इस्तेमाल होगा। और, हम वोइड(void) का उपयोग करेंगे यदि लौटने के लिए कुछ भी नहीं है। एक विशिष्ट घोषणा इस तरह दिखाई देगी; फंकशन(function) फ़ंक्शन(function) का नाम है। कोष्ठक के इस जोड़े के भीतर बाईं ओर, एक वापसी प्रकार और दाईं ओर, हमारे पास पैरामीटर(parameter) हैं। यदि एक से अधिक पैरामीटर(parameter) हैं, तो वे अल्पविराम से अलग हो जाते हैं। और, इस कोष्ठक के अंत में यदि आप एक अर्धविराम लगाते हैं, तो हम जानते हैं कि आप केवल इस बारे में बात करने के लिए इच्छुक हैं कि फ़ंक्शन(function) क्या पैरामीटर(parameter) लेता है और यह किस प्रकार का मूल्य देता है। लेकिन, आपको यह निर्दिष्ट करने में कोई दिलचस्पी नहीं है कि यह कार्यात्मक फ़ंक्शन(function) वास्तव में पैरामीटर(parameter) x और y से परिणाम पूर्णांक की गणना कैसे करता है। ऐसे मामलों में यदि आप सिर्फ अर्धविराम के साथ तर्कों की सूची पर हावी हैं, तो हम कहेंगे कि यह एक फ़ंक्शन(function) हेडर(header) या फ़ंक्शन(function) प्रोटोटाइप या फ़ंक्शन(function) हस्ताक्षर है। और अधिक से अधिक, हस्ताक्षर या प्रोटोटाइप प्रकार की शर्तें C ++ में घटित होती रहेंगी। और चूंकि इस मामले में, हस्ताक्षर के मामले में हम वास्तव में निर्दिष्ट नहीं कर रहे हैं कि परिणाम की गणना करने के लिए x और y का उपयोग कैसे किया जाएगा। यह वैकल्पिक है कि क्या आप x या y या दोनों को निर्दिष्ट करते हैं। आप इसे केवल int funct (int,int); के रूप में लिख सकते हैं; यह भी एक मान्य हेडर(header) होगा। तो, यह हमें क्या बताता है? यह हमें बताता है कि दो पैरामीटर(parameter) हैं। पहला पैरामीटर(parameter) एक पूर्णांक है; दूसरा पैरामीटर(parameter) एक और पूर्णांक है। यह बताता है कि फ़ंक्शन(function) का नाम कार्यात्मक है, यह हमें बताता है कि यह किस प्रकार का मान लौटाएगा, वह अंतर है। यह फ़ंक्शन(function) डिक्लेरेशन या फ़ंक्शन(function) हेडर(header) का उद्देश्य है। अब, जब हम यह निर्दिष्ट करने के लिए तैयार हैं कि यह फ़ंक्शन(function) क्या गणना करेगा या यह फ़ंक्शन(function) मापदंडों से परिणाम की गणना कैसे करेगा, तो हम फ़ंक्शन(function) बॉडी प्रदान करते हैं; जो संपूर्ण फंकशनस(functions) निकाय एक यौगिक कथन है। तो, यह कोष्ठक, घुंघराले ब्रेसिज़ की एक जोड़ी है, जिसके भीतर फ़ंक्शन(function) बॉडी को वापस लौटना पड़ता है। इसलिए, इसके भीतर फ़ंक्शन(function) बॉडी को निर्दिष्ट करने वाली कई घोषणाएं और बयान हो सकते हैं। एक फ़ंक्शन(function) में रिटर्न स्टेटमेंट होगा, जो अंतिम परिणाम के रूप में रिटर्न प्रकार की अभिव्यक्ति देता है। यदि फ़ंक्शन(function) कुछ भी वापस नहीं कर रहा है, यदि फ़ंक्शन(function) रिटर्न प्रकार वोइड(void) है, तो रिटर्न स्टेटमेंट के साथ जुड़ा हुआ अभिव्यक्ति नहीं होगी। कृपया ध्यान दें कि सी 89 में, यह अनुमति दी गई थी कि यदि कोई फ़ंक्शन(function) कुछ भी वापस नहीं करता है, तो रिटर्न स्टेटमेंट को निर्दिष्ट करना आवश्यक नहीं है। वह प्रोटोकॉल अभी भी जारी है। लेकिन, कई कारणों से जो स्पष्ट हो जाएंगे, जब हम C ++ की अधिक करते हैं। यह सख्ती से परिहार्य है कि आप एक फ़ंक्शन(function) लिखते हैं और रिटर्न नहीं डालते हैं। इसलिए, भले ही आप फ़ंक्शन(function) से कुछ भी नहीं लौटा सकते हैं जो वापसी प्रकार है, वोइड(void) है, कृपया एक वापसी विवरण प्रदान करें। अब, फ़ंक्शंस अपने मापदंडों को एक तंत्र द्वारा प्राप्त करते हैं, जिसे मूल्य द्वारा कॉल के रूप में जाना जाता है। मुझे लगता है कि आप सभी यह जानते हैं कि कॉल साइट पर, उदाहरण यहाँ है। शीर्ष पर, आप फ़ंक्शन(function) बॉडी, फ़ंक्शन(function) की पूरी परिभाषा देख सकते हैं। और, यहां आप फ़ंक्शन(function) इन्वोकेशन या फंकशन(function) कॉल देखते हैं, जहां हम दो मापदंडों का उपयोग कर रहे हैं जो स्थानीय हैं। इस समारोह को कॉल करने के लिए मेन रूप से उनके चर(variables) स्थानीय हैं। तो इस के परिणामस्वरूप, पहले पैरामीटर(parameter) ‘a’ को पहले औपचारिक(formal) पैरामीटर(parameter) x पर कॉपी किया जाता है। तो, कॉल ‘a' ‘b’ को वास्तविक(actual) पैरामीटर(parameter) कहा जाता है; ‘x’,’y’ को परिभाषा स्थल पर औपचारिक(formal) पैरामीटर(parameter) कहा जाता है। और, जैसा कि मैंने एक सरणी(array) के विभिन्न घटकों को एक्सेस करने और एक स्ट्रक्चर(structure) के विभिन्न घटकों को एक्सेस करने के संदर्भ में उल्लेख किया था कि अलग-अलग सम्मेलन हैं। यहां C फ़ंक्शन(function) को कॉल करने के लिए एक स्थितीय पैरामीटर(parameter) कन्वेंशन का अनुसरण करता है। तो, पहला वास्तविक(actual) पैरामीटर(parameter) पहले औपचारिक(formal) पैरामीटर(parameter) से मेल खाता है; दूसरा वास्तविक(actual) पैरामीटर(parameter) दूसरे वास्तविक(actual) औपचारिक(formal) पैरामीटर(parameter) और इसी तरह से मेल खाता है। तो, आप औपचारिक(formal) पैरामीटर(parameter) के नाम की बिल्कुल भी परवाह नहीं करते हैं। वास्तविक(actual) पैरामीटर(parameter) मान को एक पैरामीटर(parameter) से दूसरे में कॉपी किया जाता है और फिर इसे फ़ंक्शन(function) में उपयोग किया जाता है। चूंकि ये प्रतियां हैं, इसलिए उनके पास अलग-अलग मेमोरी स्थान हैं। इसलिए, जब funct() निष्पादन शुरू होता है, तो x का स्थान 'a' से भिन्न होगा। लेकिन, जब से मूल्य की प्रतिलिपि बनाई गई है, `a 'का मान 5. x है और साथ में शुरू करने के लिए x का मान भी 5. होगा, लेकिन फिर, कार्यात्मक निकाय के भीतर, हमने x और y में परिवर्तन किए हैं। हमारे पास वेतन वृद्धि x, वेतन वृद्धि y है। हमने रिटर्न वैल्यू की गणना की है। इसलिए, जब फ़ंक्शन(function) लौटता है, अर्थात, जब यह मान होता है, तो वापसी मान x + y की गणना की जाती है और कॉलर main() को वापस दिया जाता है, और उस मान को z में कॉपी किया जाता है। जब ऐसा होता है, तो हम औपचारिक(formal) पैरामीटर(parameter) x और y के मूल्यों को खो देते हैं। दिलचस्प है, a और बी जो वास्तविक(actual) पैरामीटर(parameter) हैं, वे नहीं बदलेंगे, भले ही एक्स और वाई बदल गए हों। और, यह देखना बहुत आसान है। मूल्य से कॉल में, आप अलग स्थान का उपयोग कर रहे हैं। आप बस, शुरुआत में आपने मूल्यों की नकल की थी। इसलिए, चूंकि आपने शुरुआत में मानों की प्रतिलिपि बनाई थी, इसलिए अलग-अलग स्थान, जब आप x और y खो देते हैं, तो हमारे द्वारा x या y या दोनों में किए गए सभी परिवर्तन केवल खो जाते हैं। वास्तविक(actual) पैरामीटर(parameter) प्रभावित नहीं होते हैं। इसलिए, केवल यह स्पष्ट करने के लिए कि, हम यहां 'ए' और 'बी' के मूल्यों को छाप रहे हैं। और, हम पाते हैं कि वे मूल हैं। वे अभी भी 5 और 10 हैं, भले ही x और y, प्रतिलिपि किए गए मान बदल गए थे। जो विशेष रूप से सी प्रोग्रामर के लिए बहुत आम नहीं है। या, यह धारणा है कि जिस तंत्र द्वारा आप मूल्य वापस करते हैं उसे मूल्य तंत्र द्वारा वापसी कहा जाता है। और, सी में इसका स्पष्ट रूप से उल्लेख नहीं किया गया है क्योंकि इसे वापस लाने का कोई दूसरा तरीका नहीं है। मेरा मतलब है, वापसी का एकमात्र तरीका मान वापस कॉपी करके है; क्योंकि इस बिंदु पर, फ़ंक्शन(function) 'फंक्शनल' जो निष्पादित कर रहा था समाप्त हो गया है; आप मूल्य देने के बाद समाप्त हो जाएगा। इसलिए, उस मूल्य की एक प्रति रखने के अलावा और कोई रास्ता नहीं है, जिसे हमने उस मूल्य को वापस पाने के लिए यहाँ z को सौंपा है। जैसे ही आप C ++ पर जाते हैं, हम कॉल के लिए मूल्य के साथ-साथ वैल्यू द्वारा वापसी के लिए एक अलग तंत्र देखेंगे, जो बहुत शक्तिशाली होगा। फ़ंक्शनस(functions) पुनरावर्ती हो सकते हैं। मुझे यकीन है कि आप सभी ने इसे देखा होगा। आप सभी ने इस या इस तरह के बहुत ही प्रसिद्ध फाइबोनैचि फ़ंक्शन(function) को फैक्टोरियल फ़ंक्शन(function) देखा है, जिसमें दो पुनरावर्ती कॉल का उपयोग किया जाता है। हमने मर्ज सॉर्ट(merge sort) देखा है, हमने क्विक सॉर्ट देखा है; ये सभी पुनरावर्ती फंकशनस(functions) के बहुत विशिष्ट उदाहरण हैं। किसी भी पुनरावर्ती फंकशनस(functions) में पुनरावर्ती को समाप्त करने के लिए एक पुनरावर्ती कदम और एक या अधिक निकास स्थिति होगी। यहां एक और उदाहरण दिया गया है, जिसका इस्तेमाल आमतौर पर कम होता है। इसलिए, मैंने इसे चित्रण के लिए यहाँ रखा है। आपने एक अहस्ताक्षरित पूर्णांक n दिया है। यह पुनरावर्ती फ़ंक्शन(function) n के बाइनरी प्रतिनिधित्व में 1 की संख्या की गणना करता है। आप बस इसे ध्यान से गुजरते हैं और पुनरावृत्ति तंत्र के साथ परिचित हैं। फंकशनस(functions) और पोइंटरस(pointers) को बहुत ही रोचक तरीके से मिलाया जा सकता है। और, यह फिर से सी की बहुत शक्तिशाली विशेषताओं में से एक है। सी भाषाओं के लिए हम जो निर्दिष्ट करना चाहते हैं, उस पर प्रकाश डालने से पहले, आइए हम इस उदाहरण को संक्षेप में समझें; क्योंकि यह उदाहरण द्वारा एक स्पष्टीकरण है। इसलिए, जो हम शीर्ष पर दिखा रहे हैं, स्थिति ऐसी है; कि हमारे पास ज्यामितीय वस्तुओं का एक संग्रह है। ज्यामितीय वस्तुएँ वृत्त, आयत या त्रिकोण हो सकती हैं। हम मानते हैं कि त्रिकोण समकोण त्रिभुज हैं, जो अक्ष के साथ संरेखित हैं। इसलिए, हमारे पास उनमें से प्रत्येक के लिए स्ट्रक्चर(structure) है। तो, एक वृत्त x, y है जो केंद्र और त्रिज्या है, आयत x है, y है, जो कि बाएं कोने को ऊंचाई के साथ कहता है और एक त्रिकोण x, y है, जो समकोण कोण है, आधार और आधार है ऊंचाई। और, यहां हम एक स्ट्रक्चर(structure) बनाते हैं। फिर, यह सी में लिखने का एक विशिष्ट तरीका है। हम इन सभी का एक संघ बनाते हैं क्योंकि एक ज्यामितीय वस्तु उनमें से कोई भी है। और एक विशेष GeoObject को देखते हुए, यह एक सर्कल या एक आयत या एक त्रिकोण हो सकता है। अब, मुझे कैसे पता चलेगा कि कौन सा काम किया जाता है? इसलिए, इस स्ट्रक्चर(structure) में हम एक और गणना मूल्य, gCode का उपयोग कर रहे हैं, जो Cir, Rec या Trg के कोड में से एक को रखता है। तो, विचार यह है कि अगर आपने इसे रखा है, तो इस संघ में, यदि आपने एक सर्कल के लिए स्ट्रक्चर(structure) रखी है, तो आप जीसीआर को cir में सेट करते हैं, जो कि 0 है; यदि आपने इस संघ में, एक आयत के लिए स्ट्रक्चर(structure) रखी है, तो आप Rec और इतने पर gCode डालते हैं। तो, यह एक विशिष्ट उपयोग है। तो, आप देख सकते हैं कि हमारे पास संरचनाओं का एक संघ है। और फिर, हमारे पास उस संघ और अनुक्रमण कोड युक्त एक स्ट्रक्चर(structure) है जो यह समझने के लिए कि संघ क्या है। और, यदि आप, सी प्रोग्रामिंग(programming) में ऐसा करने के लिए एक बहुत ही सामान्य प्रतिमान था। और, हम इस उदाहरण का उपयोग बाद में C ++ में करेंगे, जैसा कि मैंने विरासत के संदर्भ में कहा था। और, यह दिखाएं कि C ++ में यह कैसे अधिक कुशलता से किया जा सकता है। अब, स्थिति यह है कि ये तीन अलग-अलग प्रकार की ज्यामितीय वस्तुएं हैं और मेरा काम उन्हें स्क्रीन पर आकर्षित करना है। तो मेरे पास है, अब जिस तरह से आप एक वृत्त खींचते हैं और जिस तरह से आप एक आयत खींचते हैं और जिस तरह से आप एक समकोण त्रिभुज खींचते हैं, वे सभी अलग हैं। इसलिए, स्वाभाविक रूप से एक प्रो कोड नहीं लिखा जा सकता है। एक फ़ंक्शन(function) नहीं लिखा जा सकता है, जो इन तीनों को आकर्षित कर सकता है। तो, आप मानते हैं कि सी में 3 अलग-अलग फंकशनस(functions) हैं। वे सभी वास्तव में ड्राइंग कर रहे हैं। लेकिन सी में, निश्चित रूप से हम एक ही नाम वाले दो फंकशनस(functions) नहीं कर सकते हैं। तो, मैं उन्हें ड्राकारल के रूप में बुलाता हूं, एक आयत खींचता हूं, त्रिकोण आकर्षित करता हूं। अब, उनमें से हर एक समान स्ट्रक्चर(structure) जियोऑब्जेक्ट(GeoObject) लेता है। उदाहरण के लिए, अगर मैं ड्राक सर्किल में देखता हूं, तो यह जियोऑब्जेक्ट(GeoObject) लेता है। और, जियोऑब्जेक्ट(GeoObject) में यह पता लगाने में सक्षम होगा कि यह वास्तव में एक सर्कल है, अगर यह जीकोड के लिए जांच करता है। और, यह इन सभी मूल्यों को मुद्रित करेगा। यहाँ वास्तव में यह है, वास्तविक(actual) DrawFuncion में, प्रिंट नहीं होगा। वास्तव में सर्कल को खींचने के लिए ग्राफिक्स फ़ंक्शन(function) कॉल होंगे। लेकिन केवल इस बात को स्पष्ट करने के लिए, मैं आपको यहाँ प्रिंट के माध्यम से दिखा रहा हूँ। तो, ये तीन अलग-अलग फंकशनस(functions) हैं, जो तीन अलग-अलग प्रकार की ज्यामितीय वस्तुओं को आकर्षित कर सकते हैं। अब, हम एक नियमित मेन फंकशनस(functions) लिखना चाहते हैं, जिसने इस किसी भी वस्तु का gCode दिया है। और, उस वस्तु के संरचनात्मक मापदंडों को इसे खींचने में सक्षम होना चाहिए। इसलिए, विचार यह है कि, मैं ड्राफ्यूनियन को कॉल करना चाहूंगा। इस ड्राफंस में से कोई भी उनके नाम का उपयोग नहीं कर रहा है। लेकिन, इस तथ्य से कि अगर मेरा gCode Cir है और मैं ड्रॉ को बुलाना चाहता हूं, तो इस ड्रा को बुलाया जाना चाहिए। लेकिन, अगर मेरा gCode Rec है और मैं इसे कॉल करना चाहता हूं, तो drawRec को कॉल करना चाहिए इत्यादि। इसलिए, हम कॉल को एक समान बनाना चाहते हैं, ताकि मुझे यह जानने की आवश्यकता न हो कि इस समय मेरे पास क्या विशेष वस्तु है। मेरे पास जो वस्तु है वह पहले से ही वस्तु स्ट्रक्चर(structure) का एक हिस्सा है; क्योंकि मेरे पास एक gCode है। और फिर, यह संभव होना चाहिए कि संबंधित फ़ंक्शन(function) को बुलाया जाएगा। यहाँ जो मैकेनिज्म किया गया है, वह है, मैं एक सरणी(array) बनाता हूँ जिसका नाम है ड्रॉफ्यूशन और यह सब फंकशन(function) के नाम डालते हैं। जैसा कि आप इस फ़ंक्शन(function) नाम रखते हैं, इन्हें फ़ंक्शन(function) पोइंटरस(pointers) कहा जाता है। कोष्ठक की जोड़ी के बिना स्वयं द्वारा उपयोग किया जाने वाला एक फ़ंक्शन(function) नाम; कोष्ठक की जोड़ी, जैसा कि हम देखेंगे कि फ़ंक्शन(function) ऑपरेटर कहा जाता है, जो आपको बताता है कि फ़ंक्शन(function) को लागू किया जा रहा है। यहां उन ऑपरेटरों का उपयोग नहीं किया जाता है। तो, ये केवल फ़ंक्शन(function) नाम हैं। वे फ़ंक्शन(function) पोइंटरस(pointers) हैं। या, दूसरे शब्दों में ये पते हैं जहां संबंधित फ़ंक्शन(function) शुरू होता है। तो, यह एक सरणी(array) है। DrawArrr इन फ़ंक्शन(function) पोइंटरस(pointers) की एक सरणी(array) है। और, आप क्या करेंगेई? कि इस में सुनया प्रविष्टि DrawCir है, जो सर्कल को आकर्षित कर रहा है। तो, अगर gCode वोइड(void) है, अर्थात, Cir। और फिर, यदि मैं इस सरणी(array) को उस gCode के साथ एक्सेस करता हूं, तो गो डॉट gCode यहां Cir है, जो कि वोइड(void) है; जिसका अर्थ है ज़रोथ फंकशन(function) पोइंटरस(pointers)। तो, DrawArrr go dot gCode का मान DrawCir निकला, जबकि अगर मैं Rec के रूप में go dot gCode लगाता हूं, यदि यह एक आयत स्ट्रक्चर(structure) है, तो यहाँ जाएँ dot gCode 1 है। वोइड(void) के बाद, यह 1 है: 1; जिसका अर्थ है कि मैं जिस स्थान पर पहुंच रहा हूं, उसका स्थान 1 में है। इसलिए, यह एक विशेष फंकशन(function) drawRec है और ऐसे ही। इसलिए, संकेतन थोड़ा सामान्य नहीं है। तो, आप नाम की तरह विशिष्ट फंकशनस(functions) नहीं देखते हैं। लेकिन आप, मूल रूप से यह एक सरणी(array) तत्व की तरह दिखता है जो पोइंटर(pointer) है। और, लेकिन जब आपको कोष्ठक की जोड़ी मिलती है, तो आप जानते हैं कि एक फ़ंक्शन(function) ऑपरेटर है जो उस फ़ंक्शन(function) को आमंत्रित करता है जिसे आपके पास इस सरणी(array) तक पहुंच है। अब, एक फ़ंक्शन(function) पॉइंटर बनाने में सक्षम होने के लिए या फ़ंक्शन(function) पोइंटरस(pointers) की सरणी(array), सरणी(array) की आवश्यकता क्या है? सरणी(array) की आवश्यकता सभी तत्वों को एक ही समय में होनी चाहिए। तो, ये सभी फ़ंक्शन(function) पोइंटरस(pointers) एक ही प्रकार के होने चाहिए; जिसका अर्थ है कि उन्हें एक ही प्रकार के पैरामीटर(parameter) लेने चाहिए और उसी प्रकार के मान को वापस करना होगा। तो, हम यह सुनिश्चित करते हैं कि एक प्रकार का निर्माण करके या टाइप डीफ़ द्वारा यहां एक ड्राफ़ुनक टाइप किया जाए; जो कहता है कि यह GeoObject की स्ट्रक्चर(structure) लेता है और एक वोइड(void) देता है। हम यह कहना चाहते हैं कि यह एक पॉइंटर प्रकार है। यही कारण है कि नाम DrawFunc नहीं है। नाम स्टार ड्राफंक के रूप में दिया गया है। जिस तरह से, यदि हमें पूर्णांक पोइंटर(pointer) को परिभाषित करना है तो हम int * p कहते हैं। तो, मूल रूप से नाम पी नहीं है। नाम ऐसा है जैसे आप कह रहे हैं कि * p एक पूर्णांक है। इसलिए, यहां आप जो कह रहे हैं वह `DrawFunc' एक फ़ंक्शन(function) है जो जियोऑब्जेक्ट(GeoObject) लेता है, एक वोइड(void) देता है। और, अब यदि आप इन तीनों उम्मीदवारों के फंकशनस(functions) पर गौर करते हैं, तो उन सभी के पास एक ही हस्ताक्षर हैं। इसलिए, उनके पास एक समान हस्ताक्षर हैं। तो, वे इस ड्रॉफंक प्रकार के सभी हैं, जो कि स्ट्रक्चर(structure) जियो, स्ट्रक्चर जियोऑब्जेक्ट(GeoObject) और रिटर्निंग नथिंग लेने वाले फ़ंक्शन(function) के लिए एक संकेतक है। तो, यह एक विशिष्ट उपयोग है; समारोह के पोइंटरस(pointers) सी में बहुत शक्तिशाली तंत्र है। यदि आप; सभी ग्राफिक सिस्टम, मेनू, जो भी आप उपयोग करते हैं, वह फ़ंक्शन(function) पोइंटरस(pointers) की अवधारणा है। और, जैसा कि हम C ++ पर जाते हैं, हम दिखाएंगे कि कैसे C ++ में काफी सुधार किया गया है और इसे उपयोग करने में आसान और अधिक मजबूत बनाया गया है, जिसे वर्चुअल फ़ंक्शन(function) टेबल के रूप में जाना जाता है। वह तब आएगा जब हम उस पर चर्चा करेंगे। अंत में, C प्रोग्रामिंग(programming) भाषा पर पाठ्यक्रम को बंद करने के लिए, आप जानते हैं कि stdio.h में इनपुट, आउटपुट फ़ंक्शन(function) उपलब्ध हैं। ये आम हैं; सबसे आम प्रिंटफ(printf) और स्कैनफ हैं, जो प्रारूप स्ट्रिंग्स का उपयोग करते हैं। यह उपयोगकर्ता है; सी प्रोग्रामिंग(programming) का एक और दिलचस्प हिस्सा जिसे एलिप्सिस के रूप में जाना जाता है या इन्हें वैरिएडिक फंकशनस(functions) के रूप में जाना जाता है, यह देखते हुए कि आपको नहीं पता कि आप कितने मापदंडों को प्रिंटफ(printf) में डालेंगे। इसलिए, हमने कभी भी प्रिंटफ़ का कोड लिखा था, यह नहीं पता था कि क्या आप 5 मान या 10 मान या 1 मान प्रिंट करना चाहते हैं। तो, एक विशिष्ट प्रारूप बिट स्ट्रक्चर(structure) बनाई गई है। मैं उसकी गहराई में नहीं जाऊंगा। जब हम C ++ में I / O s पर चर्चा करते हैं, तो हम इसे पार कर लेंगे। इसके विपरीत, C ++ वैरिएड इनपुट आउटपुट फ़ंक्शंस से कैसे बचा जाता है। लेकिन, ये C में इनपुट आउटपुट करने के विशिष्ट तरीके हैं, जो मुझे यकीन है कि आप सभी इससे बहुत परिचित हैं। ये उदाहरण आपको दिखा रहे हैं कि फाइलों के साथ, सरणी(array) के साथ इनपुट आउटपुट कैसे करें। तो, एक फ़ाइल पॉइंटर का उपयोग करें, आप ऐसा करने के लिए खुला खोलें और इतने पर। अब, हम आगे बढ़ेंगे। बस यह उल्लेख करें कि यदि आपके पास सिर्फ सी भाषा थी, तो आप कोई भी प्रोग्राम नहीं लिख सकते थे क्योंकि आपने पहला प्रोग्राम देखा था, जिसकी चर्चा हमने इस मॉड्यूल(module) के पहले भाग में की थी; "हैलो वर्ल्ड" कार्यक्रम, हमें एक प्रिंटफ(printf) की आवश्यकता है। और, प्रिंटफ(printf) लिखना आसान नहीं है। इसलिए, एक प्रोग्रामिंग(programming) भाषा का प्रभावी ढंग से उपयोग करने में सक्षम होने के लिए, आपको उपलब्ध होने के लिए एक बुनियादी लाइब्ररी(library) की आवश्यकता होती है। और, कोई भी भाषा निर्दिष्ट करती है कि एक लाइब्ररी(library) क्या है जो प्रत्येक संकलक को प्रदान करना चाहिए, और उस लाइब्ररी(library) को एक मानक लाइब्ररी(library) के रूप में जाना जाता है। उस लाइब्रेरी में भाषा डिज़ाइन द्वारा निर्धारित सभी फ़ंक्शन(function) परिभाषा, फ़ंक्शन(function) नाम, छिपे हुए नाम और उन सभी को रखा गया है। C में एक मानक लाइब्ररी(library) है। जैसा कि हम देखेंगे कि जैसे ही हम C ++ में जाते हैं, हम देखेंगे कि C ++ में अधिक मजबूत मानक लाइब्ररी(library) है। लेकिन, सी मानक लाइब्ररी(library) भी काफी शक्तिशाली और दिलचस्प है। संपूर्ण C मानक लाइब्रेरी C ++ में भी उपलब्ध है। तो, ऐसा नहीं है कि सी ++ में चीजों को प्रतिस्थापित किया जाएगा; केवल नई चीजों को जोड़ा जाएगा। अब, सी मानक लाइब्ररी(library) में कई घटक हैं। हर घटक एक हेडर(header) फ़ाइल के अंतर्गत आता है। और वहाँ हैं, आप कुल सूची देख सकते हैं। लेकिन, मैंने सिर्फ 5 में डाला है, जो सबसे अधिक बार उपयोग किए जाते हैं। इनपुट आउटपुट हेडर(header); मानक लाइब्रेरी हेडर(header), जिसमें मेमोरी एलोकेशन, कन्वर्सेशन, सर्चिंग, सॉर्टिंग आदि करने के लिए चीजों का मिश्रण होता है। सी स्ट्रिंग(string) में हेरफेर करने के लिए स्ट्रिंग(string), सभी विभिन्न प्रकार के सामान्य गणितीय फंकशनस(functions) के लिए गणित लाइब्ररी(library) और त्रुटि हेडर(header) जो त्रुटि, विभिन्न त्रुटि संख्या और त्रुटि रेंज और इसी तरह से संबंधित है। तो, मानक लाइब्ररी(library) के साथ अपने आप को और अधिक परिचित करें। और, मेरा सुझाव है कि जब भी आप कुछ मानक लाइब्ररी(library) घटक का उपयोग कर रहे हैं, तो कृपया यह देखने के लिए मैनुअल देखें कि अन्य सभी फंकशनस(functions) में क्या घटक है। और, यह वास्तव में, ऐसा हो सकता है कि कई स्थानों पर, आप एक फंकशनस(functions) करने के लिए कुछ फंकशनस(functions) लिख रहे हैं, जो पहले से ही मानक लाइब्ररी(library) में उपलब्ध है। अंत में, मुझे यह भी उल्लेख करना चाहिए कि एक सी कार्यक्रम को ठीक से व्यवस्थित करने की आवश्यकता है। और, हेडर(header) फ़ाइलों और स्रोत फ़ाइलों के बीच अलग करना अच्छा है, जैसा कि मैंने कहा, जैसे लाइब्ररी(library) का आयोजन किया जाता है। जब आप stdio को शामिल करते हैं। एच, आप वास्तव में फ़ंक्शन(function) प्रोटोटाइप या फ़ंक्शन(function) हेडर(header) सहित हैं। कार्यान्वयन कहीं और दिए गए हैं। इसलिए, जब आप अपने स्वयं के कुछ फंकशनस(functions) का उपयोग करते हैं, तो आपको उन्हें हेडर(header) और उन फंकशनस(functions) को लागू करने वाली फ़ाइलों के संदर्भ में भी अलग करना चाहिए। इसलिए, आपके कार्यक्रम में आपके पास आमतौर पर दो प्रकार की हेडर(header) फाइलें होंगी; हेडर(header) फ़ाइलें जो आपने लिखी हैं और हेडर(header) फ़ाइलें जो स्टैंड मानक लाइब्रेरी से आई हैं। इसलिए, मानक लाइब्रेरी या सिस्टम हेडर(header) फ़ाइलों से आने वाली हेडर(header) फाइलें, इस प्रकार की कोणीय कोष्ठक के साथ निर्दिष्ट होनी चाहिए। और, आपके द्वारा लिखी गई हेडर(header) फाइलें दोहरे उद्धरण चिह्नों के भीतर होनी चाहिए। हम इसके और अधिक होने का कारण बताएंगे, जब हम C ++ में गहराई से जाते हैं। यह मूल रूप से, सिस्टम को बताता है कि इस फ़ाइल को कहाँ देखना है; चाहे उन्हें सिस्टम निर्देशिकाओं में देखना हो या आपको उन्हें अपने वर्तमान (संदर्भसमय: 22:52) निर्देशिका में देखना हो। तो, यह एक विशिष्ट उदाहरण है। मैं सिर्फ एक ऐसे एप्लिकेशन से निपटने की कोशिश कर रहा हूं, जिसे हल करने के लिए द्विघात समीकरणों की आवश्यकता है। इसलिए, आपको द्विघात समीकरण को हल करने की आवश्यकता के कई संदर्भ होंगे। यह अभिकलन ब्याज हो सकता है; यह कुछ पुल समीकरणों को हल कर सकता है, जो भी हो। तो, यह एप्लिकेशन प्रोग्राम है, जो मानता है कि आपके पास द्विघात समीकरण सॉल्वर है। इसलिए, आप इसे लागू कर रहे हैं। तो, आपके पास एक हेडर(header) फ़ाइल सॉल्वर डॉट एच है, जो उस फ़ंक्शन(function) का फ़ंक्शन(function) या सभी विभिन्न मापदंडों के साथ फ़ंक्शन(function) का प्रोटोटाइप देता है। आपके पास एक और है, जहां आप इस फ़ंक्शन(function) का कोड या फ़ंक्शन(function) बॉडी का कार्यान्वयन करते हैं। तो, आप इसे सॉल्वर डॉट एच कहते हैं; आप इसे सॉल्वर डॉट सी कहते हैं। सॉल्वर डॉट एच में सभी विवरण हैं। तो, यहाँ औपचारिक(formal) मापदंडों का नाम है; यहाँ औपचारिक(formal) मापदंडों का नाम नहीं है। वे सिर्फ दिए गए प्रकार हैं। और, एप्लिकेशन में आपको सिर्फ हेडर(header) जानने की जरूरत है। आपको यह जानने की आवश्यकता नहीं है कि द्विघात समीकरण कैसे हल किया जाता है। आपको जो कुछ भी जानना है वह हस्ताक्षर में है, इसके पांच पैरामीटर(parameter) हैं; उनमें से पहले तीन द्विघात समीकरण के तीन गुणांक हैं और अगले दो दो बिंदु या दो पता स्थान हैं, जहां परिणाम के दो भागों को संग्रहीत करने की आवश्यकता होती है, यदि एक जटिल मूल्य परिणाम के साथ द्विघात समीकरण हल किया जाता है। तो, आपको संग्रहीत करने के लिए वास्तविक(actual) और काल्पनिक भाग की आवश्यकता है। तो, आपको आवेदन लिखने में सक्षम होने के लिए बस इस जानकारी को जानने की आवश्यकता है। तो, आपकी एप्लिकेशन फ़ाइल में सॉल्वर डॉट एच, सिर्फ हेडर(header) शामिल है। द्विघात समीकरण सॉल्वर के आपके कार्यान्वयन में सॉल्वर डॉट एच भी शामिल है, जो यह सुनिश्चित करता है कि, इस सॉल्वर और आपके आवेदन के बीच, एक ही हेडर(header) शामिल है। तो, गलती का कोई मौका नहीं है। तो, आपको हमेशा यह अलग करना चाहिए कि हेडर(header) जो कि सामान्य फ़ंक्शन(function), मैक्रोज़, स्थिरांक, प्रकट स्थिरांक हैं जिन्हें विभिन्न स्रोत फ़ाइलों के बीच साझा किया जाना है। फिर प्रत्येक फ़ंक्शन(function) के लिए या फ़ंक्शंस के समूह के लिए, आपके पास अलग कार्यान्वयन फ़ाइलें हैं, जिसमें एक ही हेडर(header) शामिल होगा। और, इस एप्लिकेशन फ़ाइलों में केवल हेडर(header) शामिल होंगे। और, हमें संदर्भित करने के लिए कार्यान्वयन फ़ाइलों की आवश्यकता नहीं होगी। तो, कृपया इस संगठन का अनुसरण करें। और, हम C ++ पर जाते ही अधिक देखेंगे। एक सामान्य स्थिति में, यह है कि आप निष्पादन के लिए अपना कोड कैसे तैयार करते हैं। आप एक स्रोत कोड से शुरू करते हैं, जो C या C ++ हो सकता है। फिर जैसा कि आप संकलित करते हैं, आप एक आईडीई(IDE) के माध्यम से संकलन कर सकते हैं। बस ऐसा कुछ कहा या संकलित करें या आप इसे पाठ आधारित इंटरफ़ेस के माध्यम से कर सकते हैं जैसे कि आप जी प्लस या कुछ सी ++ कहते हैं, उसके बाद कुछ। यह प्रक्रिया चरणों में होती है। और, यह सिर्फ रूपरेखा है। C ++ चरणों में जाने पर हम और चर्चा करेंगे। आपकी फ़ाइल, आपकी स्रोत फ़ाइल पहले C प्रीप्रोसेसर के माध्यम से जाती है, जिसमें hash शामिल है, हैश डिफाइन, इस तरह के प्रीप्रोसेसर निर्देश का ध्यान रखता है, फिर इसे किसी प्रकार की निम्न स्तरीय भाषा में संकलित किया जाता है, जिसे असेंबली भाषा के रूप में जाना जाता है। आप देख सकते हैं कि उन फाइलों में डॉट s हैं या हो सकता है कुछ अन्य प्रणालियों में विभिन्न प्रकार के फ़ाइल नाम एक्सटेंशन होंगे। फिर आप उन्हें ऑब्जेक्ट फ़ाइलों को उत्पन्न करने के लिए इकट्ठा करते हैं जिन्हें डॉट ओ या डॉट ओब्ज कहा जाता है। और, आपके पुस्तकालयों से आने वाली कई अन्य ऑब्जेक्ट फाइलें हो सकती हैं, जैसे कि आपने stdio.h को शामिल किया है। फिर, वह stdio.h इस स्तर पर शामिल हो जाता है, लेकिन वास्तविक(actual) कार्यान्वयन उपलब्ध नहीं है। तो, इस प्रक्रिया के माध्यम से पहले से ही अलग-अलग संकलन किया गया है और एक डॉट ओ फाइल बनाई गई है। और वह डॉट ओ फाइल हो रही है, जैसा कि आप कहते हैं, आपके प्रोग्राम से जुड़ा हुआ है। यदि आप एक आईडीई(IDE) का उपयोग कर रहे हैं, तो आप इसे स्पष्ट रूप से नहीं देख पाएंगे क्योंकि आईडीई(IDE) आपके लिए इसे सेट करता है। यदि आप इसे कमांड लाइन से कर रहे हैं, तो आपको वास्तव में माइनस एल का उपयोग करना होगा और उस मानक लाइब्ररी(library) को शामिल करना होगा। और, ये सभी मिलकर आपको निष्पादन योग्य कोड देंगे। और, जैसा कि आप C ++ में अधिक जाते हैं, हम देखेंगे कि निर्मित प्रक्रिया C ++ प्रोग्रामिंग(programming) और विभिन्न प्रोग्रामिंग(programming) सुविधाओं को कैसे प्रभावित करती है। टूल्स के संदर्भ में, कई आईडीई(IDE) उपलब्ध हैं, जैसे कोड :: ब्लॉक। एक दृश्य स्टूडियो है। ग्रहण है। इसलिए, हम आपको सलाह देंगे कि आप कुछ IDE का उपयोग करें, जो खुला स्रोत है। आमतौर पर, कोड ब्लॉक या ग्रहण। और, जो भी आईडीई(IDE) आप उपयोग कर रहे हैं, आप निर्दिष्ट करते हैं कि ये मानक हैं; जैसे सी 99 एक मानक है जिसका आप उपयोग कर रहे हैं। अन्यथा, उन कार्यक्रमों का व्यवहार जो हम दिखाते हैं, जैसा कि हम उन्हें दिखाते हैं और कार्यक्रमों का व्यवहार जैसा हम आईडीई(IDE) में अनुभव करेंगे, वह अलग होगा। तो हमेशा उपयोग करें, सी के लिए आप सी 99 का उपयोग करें; C ++ के लिए हम C ++ 98 का उपयोग करेंगे। या, हम देखेंगे, किसी संदर्भ में हम C ++ 03 का उपयोग करेंगे। हम उस पर आएंगे। ये संदर्भ पुस्तकें हैं; यदि आप इसका उल्लेख करना चाहते हैं। और, इसलिए इस पूरे मॉड्यूल(module) में संक्षेप में हमने इसे हासिल किया है। हमने सी में मूलभूत अवधारणाओं की अवधारणाओं को संशोधित किया है; चर(variables), डेटा(data) प्रकार, शाब्दिक, नियंत्रण निर्माण। और, हमने फ़ंक्शन(function) और पोइंटरस(pointers) और संगठन और बिल्ड प्रक्रिया के माध्यम से पुनरावृत्त किया है। इसलिए, मुझे उम्मीद है कि आप सी में अपने फंडामेंटल पर एक त्वरित पुनरावृत्ति देंगे। यदि आपको कुछ ऐसे बिंदु मिल गए हैं जिन्हें आप अच्छी तरह से नहीं समझ पाए हैं या उदाहरण अच्छी तरह से अवशोषित नहीं हुए हैं, तो कृपया उनके माध्यम से फिर से जाएं या पूछें ब्लॉग पर हमसे सवाल। लेकिन, इस मॉड्यूल(module) के साथ हम उम्मीद करेंगे कि यह C का एक स्तर है जिसे आप C ++ भाषा प्रशिक्षण के साथ आगे बढ़ने में सक्षम होने के लिए तैयार हैं। हम यहां मॉड्यूल(module) को बंद कर देंगे। मॉड्यूल(module) दो बाद में, हम आपको दिखाना शुरू कर देंगे कि C ++ में कैसे कुछ सामान्य उदाहरण हैं जो हमने यहां देखे हैं या C में कुछ अन्य सामान्य उदाहरण अधिक कुशलतापूर्वक, प्रभावी ढंग से और C ++ में अधिक मजबूत तरीके से किए जा सकते हैं।