Jul 9, 2010

सी ++ प्रोग्रामिंग

प्रोग्रामिंग क्या है: सामान्य जीवन में हम किसी कार्य विशेष को करने का निश्चय करते हैं तो उस कार्य को करने से पूर्व उसकी रूपरेखा सुनिश्चित की जाती है। कार्य से सम्बन्धित समस्त आवश्यक शर्तों का अनुपालन उचित प्रकार हो एवं कार्य में आने वाली बाधाओं पर विचार कर उनको दूर करने की प्रक्रिया भी रूप रेखा तैयार करते समय महत्वपूर्ण विचारणीय विषय होते हैं। कार्य के प्रारम्भ होने से कार्य के सम्पन्न होने तक के एक-एक चरण (step) पर पुनर्विचार करके रूपरेखा को अन्तिम रूप देकर उस कार्य विशेष को सम्पन्न किया जाता है। इसी प्रकार कम्प्यूटर द्वारा, उसकी क्षमता के अनुसार, वांछित कार्य कराये जा सकते हैं। इसके लिए आवश्यकता है कम्प्यूटर को एक निश्चित तकनीक व क्रम में निर्देश दिए जाने की, ताकि कम्प्यूटर द्वारा इन निर्देशों का अनुपालन कराकर वांछित कार्य को सम्पन्न किया जा सके। सामान्य बोल-चाल की भाषा में इसे प्रोग्रामिंग कहा जाता है।

कम्प्यूटर को निर्देश किस प्रकार दें: कम्प्यूटर को निर्देश योजनाबद्ध रूप में, अत्यन्त स्पष्ट भाषा में एवं विस्तार से देना अत्यन्त आवश्यक होता है। कम्प्यूटर को कार्य विशेष करने के लिए एक प्रोग्राम बनाकर देना होता है। दिया गया प्रोग्राम जितना स्पष्ट, विस्तृत और सटीक होगा, कम्प्यूटर उतने ही सुचारू रूप से कार्य करेगा, उतनी ही कम गलतियां करेगा और उतने ही सही उत्तर देगा। यदि प्रोग्राम अस्पष्ट होगा और उसमें समुचित विवरण एवं स्पष्ट निर्देश नहीं होंगे तो यह सम्भव है कि कम्प्यूटर बिना परिणाम निकाले ही गणना करता रहे अथवा उससे प्राप्त परिणाम अस्पष्ट और निरर्थक हों। कम्प्यूटर के लिए कोई भी प्रोग्राम बनाते समय निम्न बातों को ध्यान में रखना आवश्यक है:
  • समस्या का सावधानीपूर्वक अध्ययन करके निर्देशों को निश्चित क्रम में क्रमबद्ध करना।
  • निर्देश इस प्रकार लिखना कि उनका अक्षरशः पालन करने पर समस्या का हल निकल सके। 
  • प्रत्येक निर्देश एक निश्चित कार्य करने के लिए हो।

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

प्रोग्रामिंग के विभिन्न चरण
  • एल्गोरिथ्म: पारिभाषिक शब्दों में किसी गणितीय समस्या अथवा डाटा को कदम-ब-कदम इस प्रकार विश्लेषित करना जिससे कि वह कम्प्यूटर के लिए ग्राह्म बन सके और कम्प्यूटर उपलब्ध डाटा को प्रयोग में लेकर गणितीय समस्या का उचित हल प्रस्तुत कर सके, एल्गोरिथ्म कहलाता है। जब कम्प्यूटर पर करने के लिए कोई कार्य दिया जाता है तो प्रोग्रामर को उसकी संपूर्ण रूपरेखा तैयार करनी होती है तथा कम्प्यूटर से बिना गलती कार्य करवाने के लिए किस क्रम से निर्देश दिए जाएंगे, यह तय करना होता है। अर्थात किसी कार्य को पूर्ण करने के लिए विभिन्न चरणों से गुजरना पड़ता है। जब समस्या के समाधान हेतु विभिन्न चरणों को क्रम से क्रमबद्ध करके लिखा जाये तो यह एल्गोरिथ्म कहलाता है। ध्यान रखें
    • एल्गोरिथ्म में दिए गए समस्त निर्देश सही एवं स्पष्ट अर्थ के होने चाहिए।
    • प्रत्येक निर्देश ऐसा होना चाहिए कि जिसका अनुपालन एक निश्चित समय में किया जा सके। 
    • कोई एक अथवा कई निर्देश ऐसे न हों जो अन्त तक दोहराए जाते रहें। यह सुनिश्चित करें कि एल्गोरिथ्म का अन्ततः समापन हो।
    • सभी निर्देशों के अनुपालन के पश्चात, एल्गोरिथ्म के समापन पर वांछित परिणाम अवश्य प्राप्त होने चाहिए।
    • किसी भी निर्देश का क्रम बदलने अथवी किसी निर्देश के छूटने पर एल्गोरिथ्म के समापन पर वांछित नहीं प्राप्त होंगे।
  • प्रवाह तालिका (Flow Chart): प्रवाह तालिका वस्तुतः एल्गोरिथ्म का चित्रात्मक प्रदर्शन है, जिसमें विभिन्न रेखाओं एवं आकृतियों का प्रयोग किया जाता है जो कि विभिन्न प्रकार के निर्देशों के लिए प्रयोग की जाती है। सामान्यतः सर्वप्रथम एक एल्गोरिथ्म को प्रवाह तालिका के रूप में प्रस्तुत किया जाता है और फिर प्रवाह तालिका के आधार पर उचित कम्प्यूटर भाषा में प्रोग्राम को तैयार किया जाता है। प्रोग्राम में तार्किक गल्ती एवं शर्तों के पूरा न होने की स्थिति एल्गोरिथ्म एवं प्रवाह तालिका अधिक स्पष्ट हो जाती है। प्रवाह तालिका में प्रयुक्त चिन्ह एवं आकृतियां निम्नलिखित हैं:
    • टर्मिनल: टर्मिनल का प्रयोग प्रोग्राम के प्रारम्भ, समापन और विराम के लिए किया जाता है  यह प्रोग्राम का प्रारम्भ होना और प्रोग्राम का समापन होना प्रदर्शित करता है।
    • इनपुट/आउटपुट: प्रोग्राम में कोई भी इनपुट देने अथवा आउटपुट प्राप्त करने के लिए इनपुट/आउटपुट चिन्ह का प्रयोग किया जाता है।
    • प्रोसेसिंग: फ्लोचार्ट में प्रोसेसिंग चिन्ह का उपयोग अंकगणितीय प्रक्रिया एवं डाटा विस्थापन सम्बन्धी निर्देशों के लिए किया जाता है। सभी अंकगणितीय प्रक्रिया जैसे जोड़ना, घटाना, गुणा करना और भाग करना प्रवाह तालिका में प्रोसेसिंग चिन्ह द्वारा प्रदर्शित किया जाता है।
    • प्रवाह रेखाएं: तीर की आकृति सिरे वाली यह रेखाएं प्रोग्राम के प्रवाह को प्रदर्शित करने के लिए की जाती है। प्रोग्राम के प्रवाह को प्रदर्शित करने के निर्देशों के क्रम है जिनके अनुसार निर्देशों का क्रियान्वयन किया जाना है।
    • निर्णायात्मक: प्रवाह तालिका में निर्णायात्मक चिन्ह का प्रयोग यह दर्शाता है कि यहां पर निर्णय लिया है जिसके दो या दो से अधिक विकल्प हो सके हैं। Decision Box में निर्णय करने के विशिष्ट मान स्पष्ट रूप से प्रकट किए गए हों।
    • संयोजक चिन्ह: प्रवाह तालिका में दो प्रकार के Connectors प्रयोग किए जाते हैं – ऑन पेज कनेक्टर तथा ऑफ पेज कनेक्टर.
    • पूर्व परिभाषित विश्लेषण चिन्ह: प्रवाह तालिका में यदि पहले की गई प्रोसेसिंग को पुनः किसी अन्य बिन्दु पर प्रयोग करना होता है तो उस बिन्दु पर प्रोसेसिंग सिम्बल के स्थान पर इस चिन्ह प्रयोग किया जाता है।
  •   मिथ्या संकेत: किसी प्रोग्राम को विकसित करने की प्रक्रिया किए जाने वाले कार्य को समझने एवं कार्य के सम्पन्न होने हेतु तर्क निर्धारण से प्रारम्भ होती है और यह कार्य प्रवाह तालिका अथवा मिथ्या संकेत की सहायता से किया जाता है। मिथ्या संकेत प्रवाह तालिका का एक विकसित विकल्प है । मिथ्या संकेत में विभिन्न आकृतियों अथवा चिन्हों की अपेक्षा प्रोग्राम की प्रक्रिया को क्रम से लिखा जाता है। चूंकि इसका प्रोग्राम को Design करने में महत्वपूर्ण स्थान है अतः इसे प्रोग्राम डिजाइन भाषा भी कहा जाता है।
प्रवाह तालिका बनाने के नियम: प्रवाह तालिका का निर्माण एक टरमिनल सिम्बल स्टार्ट से प्रारम्भ होता है। प्रवाह तालिका में प्रवाह ऊपर से नीचे एवं बाएं से दायीं ओर होना चाहिए। दो विभिन्न क्रियाएं, किसी एक प्रश्न के दो सम्भावित उत्तरों पर निर्भर करती हैं। ऐसी परिस्थिति में प्रश्न को एक निर्णय चिन्ह में प्रदर्शित करते हैं तथा इन परिस्थितियों को निर्णय चिन्ह से निकलने वाली दो प्रवाह रेखाओं द्वारा जो कि चिन्ह से बाहर की ओर आ रही हैं, प्रदर्शित करते हैं। निर्णय चिन्ह में एक प्रवाह रेखा आनी चाहिए और सभी सम्भावित उत्तरों के लिए पृथ्क रेखा होनी चाहिएं।

प्रत्येक चिन्ह में दिए गए निर्देश स्पष्ट एवं पूर्ण होने चाहिए ताकि उसे पढ़कर समझने में कठिनाई न हो। प्रवाह तालिका में प्रयुक्त नाम एवं परिवर्तनांक एक रूप होने चाहिएं। यदि प्रवाह तालिका बड़ी हो गई है और उसे अगले पृष्ठ पर भी बनाया जाना है तो प्रवाह तालिका को इन्पुट अथवा आउटपुट सिम्बल पर ही तोड़ना चाहिए तथा उपयुक्त कनेक्टर का प्रयोग करना चाहिए। प्रवाह तालिका जहां तक सम्भव हो अत्यन्त साधारण होनी चाहिए। प्रवाह रेखाएं एक-दूसरे को काटती हुई नहीं होनी चाहिएं। यदि ऐसी परिस्थिति आती है तो उपयुक्त कनेक्टर का प्रयोग करना चाहिए। प्रोसेस सिम्बल में केवल एक ही प्रवाह रेखा आनी चाहिए और एक ही प्रवाह रेखा निकलनी चाहिए। नीचे से ऊपर की ओर जाने वाली प्रवाह रेखा या तो किसी विश्लेषण की पुनरावृत्ति अथवा लूप को प्रदर्शित करनी चाहिए।

C एवं C++ में समानताएं
  • प्रोग्रामिंग भाषा C++, C के समान केस सेन्सेटिव है।
  • प्रोग्रामिंग भाषा C++ में तथा C में लिखे जाने वाले प्रोग्राम में स्टेटमेन्ट के अंत में ‘;’ सेमीकोलोन लगाया जाता है।
  • प्रोग्रामिंग भाषा C++ में लिखे प्रोग्राम में भी C के समान परिवर्तनांकों को उनके प्रयोग के पूर्व घोषित करना आवश्यक है।
  • लोकल एवं ग्लोबल परिवर्तनांक का मान समान हो सकता है । प्रोग्राम लोकल परिवर्तनांक के मान का प्रयोग करता है।
C तथा C++ में असमानताएं
  • लोकल एवं ग्लोबल परिवर्तनांकों का नाम समान हो सकता है। प्रोग्राम लोकल परिवर्तनांक के मान का प्रयोग करता है।
  • प्रोग्रामिंग भाषा C स्ट्रक्चर्ड प्रोग्रामिंग है जबकि C++ वस्तु केन्द्रित प्रोग्रामिंग भाषा है।
  • C++ में आइडेन्टीफायर में कितनी भी संख्या में कैरेक्टर हो सकते हैं जबकि C में आइडेन्टीफायर में 32 कैरेक्टर ही हो सकते हैं।
  • C++ प्रोग्रामिंग FormFree प्रोग्रामिंग है जबकि C में एक Form के अनुरूप प्रोग्रामिंग करनी होती है।
  • प्रोग्रामिंग भाषा C++ में हम नए डेटाटाइप भी बना सकते हैं जबकि C में ऐसा सम्भव नहीं है।
  • प्रोग्रामिंग भाषा C में किसी परिवर्तनांक के पास में सीधे-सीधे प्रयोग एवं परिवर्तन किया जा सकता है जबकि C++ में परिवर्तनांक के मान का प्रयोग परिवर्तन अप्रत्यक्ष रूप से किया जाता है।
  • प्रोग्रामिंग भाषा C में हैडर फाइल Stdio.h को इन्क्लूड करवाया जाता है जबकि C++ में iostream.h हैडर करवा कर इन्क्लूड करवाया जाता है।
  • C++ में main() फंक्शन int टाइप की मान रिटर्न करता है जबकि C++ में यह फंक्शन किसी प्रकार का कोई मान रिटर्न नहीं करता है।
  • प्रोग्रामिंग भाषा C++ में निर्देश में C की अपेक्षा अधिक सरल और सुगम बनाया गया है।
वस्तु केन्द्रित प्रोग्रामिंग: हम आम जीवन में किसी भी समस्या के समाधान करने के लिए पहले अपना ध्यान उस वस्तु पर केन्द्रित करते हैं तथा उस वस्तु की विशेषताओं और कमियों से ही उसके प्रयोग की विधियों की खोज करते हैं । इसे इस प्रकार समझें कि यदि हमें किसी मशीन के किसी दोष को दूर करना है, तो सर्वप्रथम उस मशीन तथा उसकी कार्य-विधि आदि के बारे में गहन विचार करते हैं, अब इस मशीन को ठीक करने के लिए उपरोक्त विचार के अनुरुप विधि एवं सामग्री का चुनाव करते हैं। इस विधि से किया गया कार्य समस्या का सटीक निदान होता है। इस प्रकार हम देखते हैं समस्त विश्व वस्तु केन्द्रित (OBJECT ORIENTED) ही है। कम्प्यूटर प्रोग्रामिंग में प्रोग्रामिंग की आधुनिक शैली वस्तु केन्द्रित प्रोग्रामिंग भी इसी तथ्य के अनुरुप है। आधुनिक कम्प्यूटर प्रोग्रामिंग भाषाओं जैसे C एवं जावा आदि में इसी प्रोग्रामिंग शैली का प्रयोग होता है।

मुख्य गुण
  • प्रक्रिया से ज्यादा आंकड़ों को महत्व दिया जाता है।
  • प्रोग्राम का ऑब्जेक्ट में विभाजन किया जाता है।
  • आंकड़ों का रूपांकन इस प्रकार किया जाता है कि वह ऑब्जेक्ट की विशेषताओं को दिखायें।
  • ऑब्जेक्ट में काम करने वाले फलनों को डेटा-स्ट्रकचर में साथ-साथ रखा जाता है।
  • आंकड़ों को गुप्त रखा जाता है तथा बाह्य फलनों को उनके परिग्रहण की अनुमति नहीं होती है।
  • ऑब्जेक्टों का आपसी सम्पर्क फलनों के द्वारा होता है।
कम्प्यूटर प्रोग्राम लिखने की परम्परागत प्रोग्रामिंग शैली में हम परिवर्तनों (VARIABLES) का प्रयोग फंक्शन (FUNCTION) के अन्दर करते हैं। इन्हीं परिवर्तनांकों के आधार पर प्रोग्रामिंग में अनेक प्रकार के कार्य जैसे गणनाएं, आकड़ें प्रिंट करना, आकड़ें संचित करना आदि कार्य होते हैं। छोटे प्रोग्राम में हम इन परिवर्तनांक को सरलता से नियंत्रित कर सकते हैं, परन्तु जैसे-जैसे प्रोग्राम बड़ा होता जाता है इन परिवर्तनांकों को नियंत्रित करना कठिन होता जाता है और प्रोग्रामिंग में गलतियां होने की सम्भावनाएं बढ़ती जाती है। वस्तु केन्द्रित प्रोग्रामिंग में परिवर्तनांकों एवं प्रोग्राम्स को एक वर्ग (CLASS) में सम्बद्ध कर दिया जाता है, जिससे अन्य प्रोग्राम द्वारा किसी वर्ग के आंकड़े प्रभावित नहीं होते हैं। इससे प्रोग्राम को नियंत्रण करना सरल हो जाता है। इस कार्य को वस्तु केन्द्रित प्रोग्रामिंग भाषा में एनकैप्स्यूलेशन (ENCAPSULATION) जिसका शाब्दिक अर्थ एक के भीतर दूसरा रखने का किया है, कहा जाता है। प्रोग्रामिंग की वस्तु केन्द्रित शैली में पहने से बने किसी प्रोग्राम अथवा वर्ग के आधार पर नए प्रोग्राम को बना सकते हैं। वस्तु केन्द्रित प्रोग्रामिंग की इस विशेषता को उत्तराधिकार (INHERITANCE) कहा जाता है। प्रोग्रामिंग की इस विशेष शैली का प्रयोग करते हुए हम पहले से बने किसी प्रोग्राम अथवा वर्ग (CLASS) का प्रयोग करके एक नया और समृद्ध सॉफ्टवेयर अत्यंत अल्प समय में विकसित कर सकते हैं।

वस्तु केन्द्रित प्रोग्रामिंग के सिद्धांत

ऑब्जेक्ट: दैनिक दिनचर्या में हम जिस ओर भी दृष्टि डालते है, चारों ओर वस्तु ही पाते हैं। यह संसार वस्तुमय है। जिसे पहचाना जा सके, जिसका एक आकार होता है, संरचना होती है, व्यवहार होता है, वस्तु कहलाती है प्रोग्रामिंग की वस्तु केन्द्रित शैली का भी यही मुख्य आधार है। विभिन्न वस्तुओं को एकत्र करके प्रयोग का एक नमूना तैयार किया जाता है, जोकि सार्वजनिक लक्ष्य को प्राप्त करने के लिए आपस में सूचनाओं का आदान-प्रदान करते हैं। ऑब्जेक्ट किसी वर्ग का एक दृष्टांत होता है ऑब्जेक्ट एवं पब्लिक फंक्शन की सहायता से ही वर्ग में घोषित किए गए परिवर्तनांकों के मान में परिवर्तन किया जाता है।

वर्ग (Class): वर्ग वर्ग विभिन्न फंक्शन्स एवं परिवर्तनांकों का एक समूह है किसी भी ऑब्जेक्ट ओरिएण्टेड प्रोग्राम में कम-से-कम एक वर्ग का घोषित किया जाना आवश्यक होता है। वर्ग एक प्रयोगकर्ता द्वारा परिभाषित डेटा-टाइप है।

आंकड़ों का पृथककरण एवं नियंत्रण
  • गुण पृथककरण (Abstraction): आंकड़ों के पृथककरण का आशय सम्पूर्ण जटिलता के सरलीकरण से है। इस प्रकार समझें कि हम लाइट ऑन करने के लिए स्विच को दबाने से स्विच के अन्दर क्या हुआ, स्विच दबाने से लाइट कैसे ऑन हुई। हमें यह सब जानने की आवश्यकता नहीं होती। यही गुण पृथककरण कहलाता है।
  • आंकड़ा नियन्त्रण (Encapsulation): आंकड़ा नियन्त्रण वस्तु केन्द्रित प्रोग्रामिंग शैली का एक अत्यंत महत्वपूर्ण तथ्य है। यह डेटा स्ट्रक्चर एवं Functionality को वस्तु (Object) में मिलाता है। एनकैप्स्यूलेशन ऑब्जेक्ट के आन्तरिक रूप को उसके उपयोगकर्ता से छुपाता भी है और उपयोग हो सकने वाले ऑब्जेक्ट को सूचित भी करता है। आंकड़ा नियन्त्रण अर्थात् फंक्शन्स व आंकड़ों का एकीकरण करना। ऑब्जेक्ट ओरिएण्टेड प्रोग्रामिंग शैली की इस विशेषता के कारण हम प्रोग्राम और एवं आंकड़ों दोनों को बाहरी नियंत्रण से बचा सकते हैं।
उत्तराधिकार (Inheritance): उत्तराधिकार भी ऑब्जेक्ट्स ओरिएण्टेड प्रोग्रामिंग शैली की एक महत्वपूर्ण एवं उपयोगी विशेषता है। इसके द्वारा हम एक वर्ग की विशेषताएं किसी दूसरे वर्ग से प्राप्त करवा सकते हैं। उत्तराधिकार की धारणा का प्रयोग करके पुराने वर्ग से नए वर्ग का निर्माण सम्भव है। नए वर्ग को व्यूत्पन्नवर्ग (Derived Class) तथा पुराने वर्ग, जिससे इसे बनाया गया है, को मूल वर्ग (Base Class) कहा जाता है यह व्यूत्पन्नवर्ग (Derived Class) का मूल वर्ग की आंकड़ा डाटा संरचनाओं एवं फंक्शन्स पर समान अधिकार रखता है। यह नया वर्ग मूल वर्ग से लिए गए आंकड़ों एवं फंक्शन्स में नए आंकड़ें एवं फंक्शन्स को जोड़ सकता है।
  • यह वस्तु केन्द्रित प्रोग्रामिंग का एक अनिवार्य गुण है इसमें पृष्ठ-भूमि या किसी स्पष्टीकरण की आवश्यकता नहीं है।
  • यह एक प्रक्रिया है जिसमें एक वस्तु किसी दूसरे वस्तु के गुणों का उपार्जन करती है।
  • यह कि यह विधि किसी सामान्य वस्तु विशिष्ट करने का गुण रखती है।
  • यह Reusability का विचार प्रदान करती है।
  • हम पहले बने वर्ग में बिना किसी परिवर्तन के नये गुणों को जोड़ सकते हैं।
बहुरूपण (Polymorphism): बहुरूपण का शाब्दिक अर्थ है एक नाम पर अनेक कार्य। इस विधि से हम किसी कार्य को पृथक परिस्थिति में उसी के अनुसार करवा सकते हैं। बहुरूपण हमें समान बाहरी स्ट्रक्चर के आन्तिरक भिन्नता लिए हुए ऑब्जेक्ट्स को प्रयोग करने से की सुविधा प्रदान करता है।
  • बहुरूपण एक से अधिक रूप लेने की क्षमता प्रदान करता है।
  • विभिन्न वस्तुओं के संदर्भ में प्रचालन एक से अधिक व्यवहार प्रदर्शित करता है।
  • फंक्शन तथा ऑपरेटर का व्यवहार प्रचालन में प्रयोग किए गए आंकड़ों पर निर्भर करता है।
बहुरूपण दो प्रकार के होते हैं
  • फंक्शन ओवरलोडिंग (Function Overloading): फंक्शन एक से अधिक व्यवहार प्रदर्शित करता है।
  • ऑपरेटर ओवरलोडिंग (Operator Overloading): ऑपरेटर विभिन्न वस्तुओं के सन्दर्भ एक से अधिक व्यवहार प्रदर्शित करता है।
संदेश प्रवहन: ऑब्जेक्ट ओरिएण्टेड प्रोग्राम एक अनेक ऑब्जेक्ट्स का समूह होता है, जो आपस में एक-दूसरे को आवश्यकता पड़ने पर संदेश भेजते भी हैं और प्राप्त भी करते हैं। किसी ऑब्जैक्ट के लिए एक सन्देश एक निश्चित प्रक्रिया अथवा प्रक्रिया को कार्यान्वित करने के लिए होता है अतः सन्देश प्राप्त करके ऑब्जेक्ट एक निश्चित प्रक्रिया को कार्यान्वित करके परिणाम प्रस्तुत करता है। संदेश प्रवहन एक निश्चित प्रक्रिया कार्यान्वित करने के लिए होता है अतः संदेश प्राप्त करके ऑब्जेक्ट एक निश्चित प्रक्रिया कार्यान्वित करके परिणाम प्रस्तुत करते हैं। संदेश प्रवहन के लिए हमें ऑब्जेक्ट का नाम, फंक्शन का नाम तथा उपयोगी जानकारी देनी पड़ती है।

C++ प्रोग्राम की संरचना: C++ प्रोग्राम परिभाषा एवं घोषणा का संग्रह है।
  • आंकड़ों के प्रकार का परिभाषन
  • ग्लोबल आंकड़ों का परिभाषन
  • फंक्शनों का परिभाषन
  • वर्गों का परिभाषन 
  • एक विशेष फंक्शन main()
इन्क्लूड स्टेटमेन्ट(Include Statement )
  • कम्पाइलर अपना काम शुरू करने से पहले #include के द्वारा iostream.h के Contents को हमारी फाइल में जोड़ता है।
  • इसके द्वारा आप अपने प्रोग्राम में C++ की Standard Library द्वारा बनाये गये फंक्शन तथा वर्ग का उपयोग कर सकते हैं।
  • आप अपने द्वारा बनायी फाइल भी जोड़ सकते हैं।
कुछ सर्वाधिक प्रयोग में आने वाले includes
  • Basic I/O: iostream.h
  • I/O manipulation: iomanip.h
  • Standard Library: stdlio.h
  • Time and Date support: time.h
C++ प्री-प्रोसेसर
  • C++ के कम्पायलर स्वतः ही एक प्री-प्रोसेसर को Invoke करते हैं जो कि #include तथा स्पेशल निर्देशों के क्रियान्वयन का ख्याल रखते हैं।
  • प्री-प्रोसेसर को क्रियान्वित करने के लिए कुछ करने की जरूरत नहीं है ये स्वतः ही क्रियान्वित होते हैं।
वेरीयेबल
  • प्रोग्राम में वेरीयेबल का प्रयोग होता है। int integer1, integer2, sum;
  • वेरियेबल सिर्फ मेमोरी में विभिन्न स्थानों के लिए एक नाम का कार्य करता है।
  • C++ के हर वेरीयेबल का टाइप एक होना चाहिए।
  • C++ में वेरीयेबल को प्रयोग में लाने से पहले उनको Declared करना जरूरी होता है।
  • C++ में वेरियेबल की घोषणा इस प्रकार की जाती है type var_name; 
  • टाइप वेरीयेबल के प्रकार की ओर इंगित करता है।
  • C++ के built in type इस प्रकार है - int,char,float,double,boolean 
  •  आप अपने नये टाइप बना सकते हैं।
C++ में वेरीयेबल के नाम
  • इंग्लिश के अक्षर, अंक, Underscore _ से बने होते हैं।
  • शुरु का अक्षर अंक नहीं होना चाहिए।
  • Case Sensitive होते हैं।
  • किसी भी लम्बाई के हो सकते हैं।
  • अच्छे नाम पाठक को उस वेरीयेबल के प्रयोग के बारे में जानकारी देते हैं।
लिट्रल्स (Literals): लिट्रल्स प्रोग्राम में प्रयोग किए गए स्थिरांक होते हैं। लिट्रल्स के उदाहरण 22 3.141 59 0x2A false “Hi Dave” ‘c’

कोंस्टेंट्स (Constants): हम एक वेरीयेबल में उसके declaration के समय ही Initialize कर सकते हैं अर्थात उसका मान स्थिर कर सकते हैं। int foo = 17; double PI = 3.14159; char newline = ‘\n’;

डेटाटाइप रेंज
  • char -: 1 Byte -: -128 to 127
  • unsigned char -: 1 Byte -: 0 to 255
  • signed char -: 1 Byte -: -128 to 127
  • int -: 2 Byte -: -32768 to 32767
  • unsigned int -: 2 Byte -: 0 to 65535
  • signed int : 2 Byte -: -31768 to 32767
  • short int -: 3 Byte -: -31768 to 32767
  • unsigned short int -: 2 Byte -: 0 to 65535
  • signed short int -: 2 Byte -: -31768 to 32767
  • long int -: 4 Byte -: -2147483648 to 2147483647
विभिन्न ओपरेटर
  • गणितीय ओपरेटर
    • + -: Addition
    • - -: Subtraction
    • * -: Multiplication
    • / -: Division
    • % -: Modulus Division
    • प्रिसीडेंस (Precedence): प्रिसिडेंस यह निर्धारित करता है कि कौन सा ऑपरेटर किस क्रम में क्रियान्वित होगा। किसी भी lower प्रिसिडेंस के ऑपरेटर पहले क्रियान्वित होंगे।
      • () -: left to right high
      • * / % -: left to right middle
      • + - -: left to right low
  • सम्बन्ध सूचक एवं तुलनात्मक ऑपरेटर (Relational & Equality Operators): सम्बन्ध सूचक एवं तुलनात्मक ऑपरेटर का प्रयोग मानो की तुलना करने में होता है।
    • > -: Greater than
    • >= -: Greater than or equal
    • < -: Less than
    • <= -: Less than or equal
    • == -: Equal to
    • != -: Not Equal to 
  • असाइनमेंट ऑपरेटर (Assignment Operators)
  • इन्क्रीमेंट ऑपरेटर -: ++
  • डिक्रीमेंट ऑपरेटर -: --
  • साइज़ ऑफ ऑपरेटर -: sizeof()
  • स्कोप रेज़ोल्यूश्न ऑपरेटर -: ::
कंट्रोल स्ट्रक्चर: जब तक कुछ विशेष नहीं घटता प्रोग्राम क्रम से ही क्रियान्वित हो जाता है । जब हम कुछ विशेष चाहे तो कन्ट्रोल स्ट्रक्चर का प्रयोग करते हैं कन्ट्रोल स्ट्रक्चर मुख्यतः दो कार्य करती है
  • सेलेक्शन (Selection): एक Selection Control Structure कई विकल्पों में से एक विकल्प का चुनाव करती है। किसी भी एक विकल्प के क्रियान्वयन में कोई ना कोई अनिवार्य शर्त होनी चाहिए। C++ में कई selection control structures हैं जैसे if, if/else, switch
  • रिपिटिशन (Repetition): Repetition Control Structures हमें कुछ क्रियाओं को बार-बार दोहराने की क्षमता प्रदान करता है। C++ में कई repetition control structures हैं जैसे while, for, do/while
If स्टेटमेन्ट: यह Decision Making Element है। इसमें केवल True Condition ही क्रियान्वित होगी। इस Statement का प्रयोग प्रोग्रामिंग भाषा C++ में सबसे अधिक किया जाता है। इसे स्टेटमेन्ट की (Key) कहा जाता है। If Statement में नियंत्रण का रूपान्तरण दी हुई शर्त के पूर्ण होने पर निर्भर है। यह एक Condition Branching प्रक्रिया है। इस स्टेटमेन्ट में की-वर्ड if के बाद () में शर्त घोषित की जाती है यदि वह शर्त पूरी होती है तो उससे सम्बन्धित स्टेटमेन्ट क्रियान्वित होती है, यदि वह शर्त-पूर्ण नहीं होती है तो if statement प्रोग्राम का नियन्त्रण प्रोग्राम के उस statement में स्थानान्तरित कर देता है। यदि हम एक से अधिक स्टेटमेन्ट का प्रयोग शर्त के पूर्ण होने पर करना चाहते हैं तो Statement को () के अन्दर लिखा जाता है।
if (condition)
{
statement;
}

if/else स्टेटमेन्ट: if/else में यदि हमें if Statement की शर्त पूरी होने पर उससे सम्बन्धित सभी स्टेटमेन्ट कार्यान्वित कराना चाहते हैं और शर्त अपूर्ण होने पर कुछ अन्य स्टेटमेन्ट को क्रियान्वित कराना चाहते हैं ऐसी परिस्थियों में if/else का उपयोग किया जाता है।
if(condition)
{
statement;
}
else
{
statement;
}

गुम्फित (Nested) if-else statement: जब किसी if else Statement में एक से अधिक if-else का प्रयोग किया जाता है तो उसे गुम्फित if-else Statement कहा जाता है। Nested का शाब्दिक अर्थ है ‘शरण लेना’ अर्थात् जब किसी if else Statement में एक से अधिक if else statement शरणागत होते हैं तब इन सभी को गुम्फित (Nested) if-else स्टेटमेन्ट कहा जाता है।
Conditional Operator (?:) Statement: प्रोग्रामिंग भाषा C++ में Conditional Operator जिसे ?: द्वारा दर्शाया जाता है इसका प्रयोग भी if--else की भांति किया जाता है। इसे लिखने का तरीका छोटा होने के कारण इसका प्रयोग अधिक होता है।

Switch स्टेटमेन्ट: कभी-कभी किसी प्रोग्राम में if-else अथवा Nested if else का रुप इतना जटिल हो जाता है कि प्रोग्रामर स्वयं दुविधा में पड़ जाता है। ऐसी परिस्थित में C++ switch statement की सुविधा दी है। इसमें हमारे पास किसी एक शर्त के अन्य विकल्प रहते हैं और प्रत्येक विकल्प के लिए अन्य भिन्न कार्यान्वयन होता है तो switch statement का प्रयोग किया जाता है। switch statement में की-switch के बाद () brace में उस परिवर्तनांक का मान देते हैं जिस परिवर्तनांक का मान नीचे परिभाषित किए गए case के अनुसार नियत करना होता है। switch statement में की-वर्ड case के बाद परिवर्तनांक का मान उपरोक्त दिए गए case में नहीं पाया जाता है तो program default statement को देना आवश्यक नहीं है।
switch(variable)
{
case value-1:
statement-block-1
break;
case value-2:
statement-block-2
break;
default:
ststement-block-3
break;
}
goto स्टेटमेन्ट: कभी-कभी यह आवश्यक हो जाता है कि प्रोग्राम के कार्यान्वयन के दौरान प्रोग्राम के सामान्य कार्यान्वयन को छोड़कर प्रोग्राम को किसी और भाग में जाना होता है। ऐसी स्थिति में goto स्टेटमेंट का प्रयोग किया जाता है। जहां पर हमें Program का रुपान्तरण करना होता है वहां हम Label का प्रयोग करते हैं इसमें Label के आगे Colon (:) लगाया जाता है। keyword goto के बाद उस लेबल का नाम प्रयोग किया जाता है। लेबल का नाम की-वर्ड के अतिरिक्त कुछ भी हो सकता है तथा इसकी लम्बाई अधिकतम आठ word होती है। goto statement प्रयोग करने की दो परिस्थितियां हो सकती है : अग्रगामी goto तथा पश्चगामी goto.

ब्रान्चिंग (Branching): जब किसी प्रोग्राम में किसी statement के दो अथवा दो से अधिक सम्भावित परिणाम है तो इसे प्रोग्राम की ब्रान्चिंग कहा जाता है। Branching दो प्रकार की होती है
  • बिना शर्त ब्रांचिंग: जब किसी को प्रोग्रामिंग की ब्रांचिंग के लिए किसी शर्त का प्रयोग नहीं किया जाता है तो बिना शर्त ब्रांचिंग कहा जाता है। goto स्टेटमेन्ट बिना शर्त ब्रांचिंग प्रक्रिया है। 
  • सशर्त ब्रांचिंग: जब किसी प्रोग्रामिंग की ब्रांचिंग के लिए शर्त का प्रयोग किया जाता है तो उसे सशर्त Branching कहा जाता है। लूपिंग एक सशर्त ब्रांचिंग प्रक्रिया है। C++ में तीन प्रकार की सशर्त ब्रांचिंग प्रयोग की जाती है। 
पुनरावृति (Looping)

While स्टेटमेन्ट: while स्टेटमेन्ट में while के बाद () braces के अन्दर वह शर्त दी जाती है जिसके अनुसार लूपिंग करनी है। यदि शर्त पूरी होती है तो while स्टेटमेन्ट के बाद लिख गया block execute होता है बाद में पुनः while की शर्त को जांचा जाता है। अब भी अगर शर्त पूरी होती है तो block statement पुनः execute होता है। यह प्रक्रिया तब तक चलती है जब तक while statement की शर्त पूरी होती है। while का प्रयोग वहां होता है जहां यह पहले से पता हो कि पुनरावृत्ति किन शर्त पर होनी है। while(condition)
{
statement;
statement;
}

do while स्टेटमेन्ट: यह भी सशर्त ब्रांचिंग प्रक्रिया हो इसे स्टेटमेन्ट की भांति ही प्रयोग किया जाता है। इसमें मुख्य अन्तर यह है कि while में पहले condition check चैक होती है और शर्त पूर्ण होने पर ही Block स्टेटमेन्ट execute होता है लेकिन do स्टेटमेन्ट में पहले Block statement execute होता है उसके बाद शर्त को चैक किया जाता है। यदि शर्त पूरी होती है तो पुनः Block स्टेटमेन्ट execute होता है यह प्रक्रिया तब तक चलती है जब तक शर्त अपूर्ण नहीं होती है।
do
{
statement;
statement;
statement;
}while(condition)

for स्टेटमेन्ट: यह C++ में सबसे अधिक प्रयोग किया जाने वाला एक looping स्टेटमेन्ट है। with के बाद प्रयोग () braces के अन्दर लिखा जाता है। इन Braces को तीन भागों में बांटा जाता है। प्रथम भाग में परिवर्तनांक को मान प्रदान कर सकते हैं। इस भाग में हम loop की शर्त लिखते हैं। अन्तिम भाग में परिवर्तनांक का मान घटा या बढा सकते हैं। प्रथम व द्वितीय भाग में semicolon (;) का प्रयोग अवश्य होता है।
for(initialization;condition;increment/decrement)
{
statement;
statement;
statement;
}

Break और Continue स्टेटमेन्ट
  • break और continue स्टेटमेन्ट नियंत्रण के बहाव को रोकते हैं।
  • break स्टेटमेन्ट कार्यान्वित होने वाले नियंत्रण को iterative loop से बाहर निकालता है।
  • किसी प्रोग्राम में continue स्टेटमेन्ट के द्वारा वर्तमान लूप बाहर आकर अगले लूप को कार्यान्वित किया जाता है।
C++ के फंक्शन्स: दूसरी भाषाओं में इसे प्रक्रिया (Procedure) या सबरुटीन (subroutine) भी कहा जाता है। C++ के सभी फंक्शन का रिटर्न टाइप होना आवश्यक है। कभी-कभी फंक्शन में कोई रिटर्न टाइप नहीं होता तो ऐसे फंक्शन को void टाइप फंक्शन कहा जाता है। C++ फंक्शनों की पैरामीटर सूची होती है। ये पैरामीटर तत्व होते हैं, जिनकी सहायता से फंक्शन क्रिया करते हैं। हर पैरामीटर का एक प्रकार होता है। Zero पैरामीटर भी हो सकते हैं। उदाहरण:
int add2ints(int a, int b)
{
return(a+b);
}

गणितीय Library फंक्शन: C++ में एक गणितीय Library अंतर्निहित हैं। इस फंक्शनों के प्रयोग से पहले इन्हें कॉल करने की विधि जाननी होगी। यह जानना होगा कि वे क्या रिटर्न करती हैं। वे किस प्रकार करते हैं यह जानने की आवश्यकता नहीं है।

फंक्शन लिखने की विधि: यह तय करना होगा कि फंक्शन कैसा होगा। 1. रिटर्न 2. नाम या 3. पैरामीटर फिर आपको फंक्शन का कोड लिखना होगा।

फंक्शन के पैरामीटर: पैरामीटर फंक्शन के बॉडी में अंतर्निहीत स्थानीय वेरियेबल होते हैं। जब फंक्शन को कॉल किया जाता है तो उसमें मान रखे जाते हैं। फंक्शन उन मानों की एक प्रतिलिपि प्राप्त कर लेता है।

ब्लॉक वेरीयेबल: आप ऐसे वेरीयेबल को भी घोषित कर सकते हैं जिनका अस्तित्व एक ब्लॉक तक सीमित हो। उदाहरण:
{
int foo;
....
....
}

ग्लोबल वेरीयेबल: आप फंक्शन के बाहर वेरीयेबल की घोषणा कर सकते हैं। ये वेरीयेबल ग्लोबल वेरीयेबल कहलाते हैं। कोई फंक्शन इन ग्लोबल वेरीयेबलों का प्रयोग/परिवर्तन कर सकता हैं। उदाहरण: fly जो इंगित करता है कि डिबगिंग सूचना प्रिंट करना है या नहीं।

विस्तार क्षेत्र: एक वेरीयेबल का विस्तार क्षेत्र वह क्षेत्र होता है जहाँ वेरीयेबल कोई अस्तित्व रखता है। एक ग्लोबल वेरीयेबल के विस्तार का क्षेत्र Global होता है। एक क्षेत्रियवेरीयेबल का विस्तार क्षेत्र उस फंक्शन तक ही सीमित होता है जहां उसकी घोषणा की गई हो। एक ब्लॉक वेरीयेबल का विस्तार उस ब्लॉक तक ही सीमित होता है जहां उसकी घोषणा की गई हो।

एक फंक्शन का विस्तार क्षेत्र: C++ में हम एक identifier के विस्तार क्षेत्र की बात करते हैं। वह एक फंक्शन या वेरीयेबल हो सकता है। फंक्शन का विस्तार क्षेत्र उस फाइल तक होता है। उस फाइल में कोई भी जो उस फंक्शन की परिभाषा का पालन करता है फंक्शन के नाम का उपयोग कर सकता है कभी-कभी यह सुविधाजनक नहीं होता। हम फंक्शन को फाइल के ऊपरी भाग में प्रयोग करना चाहते हैं पर नीचे परिभाषित करते हैं।

फंक्शन प्रोटोटाइप: एक फंक्शन प्रोटोटाइप फंक्शन के प्रयोग से पहले उसकी रूप रेखा का उल्लेख का कार्य करती है। ताकि कम्पायलर फंक्शन की परिभाषा के बिना भी फंक्शन को कम्पाइल कर सके। एक फंक्शन का प्रोटोटाइप उसके नाम, रिटर्न टाइप तथा पैरामीटर टाइप का उल्लेख करता है। उदाहरण:
double sqrt(double);
int add2nums(int,int);
int counter(void); 

रिकर्शन: फंक्शन अपने आप को काल कर सकते हैं इसे ही रिकर्सन कहते हैं। रिकर्सन बहुत उपयोगी है-प्रायः एक जटिल समस्या को रिकर्सन के प्रयोग से आसानी से सुलझाया जा सकता है।

इनलाइन फंक्शन: इनलाइन फंक्शन वे फंक्शन हैं जो मुख्य प्रोग्राम में बुलाने पर वे स्वतः ही मुख्य प्रोग्राम में सम्मिलित हो जाते हैं। कम्पाइलर फंक्शन की सारी कोडिंग मुख्य प्रोग्राम में add करके बार-बार फंक्शन call करने की प्रक्रिया को बदलता है। inline function को निम्नांकित प्रकार से परिभाषित किया जा सकता है। उदाहरण – 
inline function-header
{
function body
}

फंक्शन आवरलोडिंग: प्रोग्रामिंग भाषा C++ में हम एक ही नाम से एक से अधिक फंक्शन बना सकते हैं। इसमें नाम तो एक ही रहता है लेकिन argument list अलग-अलग होती है।

Call-by-value तथा Call-by-reference में अन्तर: फंक्शन को प्रोग्राम में उसके मान के आधार पर बुलाने को Call-by-value कहा जाता है। फंक्शन को इस प्रकार प्रोग्राम में बुलाने पर actual argument में दिया गया मान formal argument में कॉपी नहीं होता है। इस प्रकार इसके मूल मान पर ही विभिन्न गणनायें होती है।

उपनाम (References): एक reference variable किसी भी variable का उपनाम (References) होता है। reference variable को किसी variable को reference करने के लिए सबसे पहले initialize करना पड़ता है। जब एक बार reference variable initialize हो जाता है तो वह सामान्य variable की तरह व्यवहार करता है। Reference Variable Declaration करने के लिए उसके नाम के पहले & चिह्न लगाया जाता है जैसे: 
int &foo;
double &alah;
char &c; 

कन्स्ट्रक्टर (Constructor): यह एक विशिष्ट प्रकार का सदस्य फंक्शन है जिससे वर्ग के ऑब्जेक्ट को बनाते समय प्रारम्भिक मान प्रदान किया जाता है। इस सदस्य फंक्शन को विशेष इसलिए कहा जाता है क्योंकि इसका नाम वही होता है जो वर्ग का होता है। जब भी इनसे सम्बन्धित वर्ग के लिए कोई ऑब्जेक्ट बनाया जाता है तो यह अपने आप invoke हो जाते हैं अर्थात् स्वतः ही सक्रिय हो जाते हैं। इसे कन्स्ट्रक्टर इसलिए कहा जाता है क्योंकि ये अपने वर्ग के ऑंकड़ा सदस्यों को मान प्रदान करते हैं। कन्स्ट्रक्टर को निम्न प्रकार से बनाया तथा परिभाषित किया जाता है :
class integer
{
int m, n;
public:
integer (void); // constructor declared
};
integer :: integer (void) // constructor defined
{
m = 0; n = 0;
}

कन्स्ट्रक्टर फंक्शन की विशेषताएं 
  • ये वर्ग के public भाग में घोषित किये जाते हैं।
  • ये वर्ग पर आधारित ऑब्जेक्ट को बनाते समय स्वतः ही call होते हैं।
  • ये फंक्शन होने के बावजूद कोई मान return नहीं करते हैं।
  • ये inherite नहीं होते हैं।
  • ये फंक्शन virtual नहीं हो सकते हैं।
  • इन फंक्शन को उनके addresses. से refer नहीं किया जा सकता है।
  • एक ऑब्जेक्ट जिसमे constructor या destructor हो उन्हें geunion के सदस्य की तरह उपयोग नहीं कर सकते हैं।
  • इस फंक्शन को हम new और delete ऑपरेटर के द्वारा ‘implicit calls’ कर सकते हैं। जब memory allocation की आवश्यकता होती है।
कन्स्ट्रक्टर के विभिन्न प्रकार 
  • Default Constructor: कन्स्ट्रक्टर फंक्शन जिसमें कोई parameter pass नहीं किया जाता है उसे Default Constructor कहते हैं। 
  • Parameter Constructor: ऐसे कन्स्ट्रक्टर फंक्शन जिसमें argument pass किया जाता है उसे Parameter Constructor कहते हैं। 
  • Copy Constructor: ऐसे कन्स्ट्रक्टर फंक्शन जो कि अपने ही वर्ग का एक reference parameter की तरह स्वीकार करते हैं।
डेस्ट्रक्टर (Destructor): ये कम्प्यूटर मेमोरी में object को जो स्थान constructor द्वारा प्रदान किया जाता है उस स्थान को मैमोरी से समाप्त करने के लिए destructor का प्रयोग किया जाता है। Constructor की तरह destructor भी वर्ग का सदस्य फंक्शन है जिसका नाम वर्ग के नाम पर होता है परन्तु इसके नाम के पहले एक चिह्न (~) लगाया जाता है । Destructor कभी भी argument नहीं लेता और कोई भी मान return नहीं करता है । यह compilers द्वारा implicitly मेमोरी को मुक्त करने के लिए प्रयोग किया जाता है।

वर्ग और ऑब्जेक्ट: प्रोग्रामिंग भाषा C++ में वर्ग “class” का एक महत्वपूर्ण स्थान होता है इसलिए इस भाषा को C with classes का नाम दिया गया है। वर्ग C में प्रयोग हुये structure का विस्तृत रूप हैं। C++ में structure को standard data type की तरह उपयोग किया जा सकता है। C के structures को extend करके C++ ने नया data type वर्ग CLASS बनाया है जो structures के सभी गुणों का समर्थन करता है। OOP के अन्तर्गत आने वाले विभिन्न गुणों का समावेश किया गया है जैसे inheritance data hiding का समर्थन। इसमें data. को private और public बनाया जा सकता है।

ऑब्जेक्ट प्रकार: C++ इसमें class object का प्रकार है। जब हम कोई नया वर्ग बनाते हैं तथा परिभाषित करते हैं तो हम एक नयो प्रकार का attributes तथा behavior परिभाषित करते हैं। Data member attribute है। Behavior फंक्शन के द्वारा परिभाषित किए जाते हैं। इस प्रकार एस वर्ग आकड़ो और इससे सम्बन्धित फंक्शन का संयुक्त रूप है।

वर्ग बनाना: यह दो भागों से मिलकर बना है
  • वर्ग की घोषणा करना (Class Declaration): वर्ग की घोषणा करने का आशय वर्ग में सदस्यों के आकड़ा प्रकार एवं स्कोप की व्याख्या करना। 
  • वर्ग के फंक्शन को परिभाषित करना (Class Function Definitions): इसका आशय यह है कि कैसे वर्ग को परिभाषित किया जा सकता है ।
class class_name
{
private :
variable declarations;
function declarations;
public :
variable declarations;
function declarations;
};

ऑब्जेक्ट बनाना: वर्ग बनाने के बाद उस वर्ग पर आधारित नये वेरीयेबल घोषित कर सकते हैं। ये वेरीयेबल ही वर्ग का ऑब्जेक्ट कहलाता है। ऑब्जेक्ट की घोषणा की जा सकती है – वर्ग का नाम तथा वेरीयेबल नाम के द्वारा item x ऑब्जेक्ट की घोषणा वर्ग के बनने के साथ-साथ भी की जा सकती है। जैसे:
class item
{

} x, y, z;

वर्ग के सदस्यों तक पहुंचना: वर्ग के Private data तथा सदस्य फंक्शन तक केवल वर्ग के public function के द्वारा ही पहुंचाया जा सकता है। Private data सदस्यों तक निम्न सूत्रानुसार पहुंचाया जा सकता है:
object-name.function-name (actual arguments)
Eg.
X.putdata()
X.getdata(100, 7.5)

ऐसे ऑकड़े जिनको public घोषित किया गया है उनको ऑब्जेक्ट के माध्यम से सीधे-सीधे बुलाया जा सकता है। उदाहरण:
p.x = 10; 

सदस्य फंक्शन की विशेषताएं: एक से अधिक वर्ग में एक नाम के सदस्य फंक्शन हो सकते हैं। सदस्य फंक्शन private data को access कर सकते हैं। वर्ग का सदस्य फंक्शन इस वर्ग के किसी अन्य सदस्य फंक्शन को अपने अंदर डॉट ऑपरेटर के प्रयोग के बिना भी बुला सकता है। वर्ग के सदस्य फंक्शन को दो तरह से परिभाषित किया जा सकता है वर्ग के बाहर तथा वर्ग के अन्दर.

वर्ग के बाहर सदस्य फंक्शन को परिभाषित करना: वर्ग के बाहर सदस्य फंक्शन को निम्नानुसार सूत्र द्वारा परिभाषित किया जा सकता है:
return-type class-name :: function-name (argument declaration)
{
Function body
}

वर्ग के अन्दर सदस्य फंक्शन को परिभाषित करना: जब किसी सदस्य फंक्शन को वर्ग के अन्दर ही घोषित किया जाता है तब वह एक inline function बन जाता है। सामान्यतः छोटे फंक्शन ही हमें वर्ग के अन्दर घोषित करने चाहिए।

वर्ग के बाहर परिभाषित फंक्शन को Inline बनाना: इसके लिए keyword Inline का प्रयोग किया जाता है। वर्ग के बाहर सदस्य फंक्शन को परिभाषित करते समय फंक्शन के नाम के पहले इस keyword का प्रयोग किया जाता है।

प्रायवेट सदस्य फंक्शन: एक प्रायवेट सदस्य फंक्शन केवल उसी वर्ग के किसी अन्य सदस्य फंक्शन द्वारा प्रयोग किया अथवा बुलाया जा सकता है । किसी ऑब्जेक्ट के द्वारा dot operator. की सहायता से नहीं बुलाया जा सकता है। वर्ग में घोषित किए गए स्टेटिक आंकड़ा सदस्य का मान इस वर्ग के पहले ऑब्जेक्ट के बनने के साथ ही शून्य हो जाता है और अब इसमें कोई अन्य मान initialize नहीं किया जा सकता है। पूरे वर्ग के लिए स्टेटिक ऑकड़ा सदस्य के मान की एक copy बनती है जो पूरे प्रोग्राम में इसी वर्ग के एक अथवा अधिक ऑब्जेक्ट प्रयोग कर सकते हैं। स्टेटिक ऑकड़ा सदस्य का प्रयोग सामान्यतः तब किया जाता है जब हमें किसी मान को सम्पूरण वर्ग में समान रखना होता है।

वर्ग में सदस्य फंक्शन का प्रयोग: स्टेटिक सदस्य फंक्शन केवल इसी वर्ग में घोषित किए गए स्टेटिक वेरीयेबल तक ही पहुंच सकते हैं अर्थात् access कर सकते हैं। स्टेटिक सदस्य फंक्शन को वर्ग के नाम से बुलाया जाता है । ऑब्जेक्ट के नाम से नहीं। उदाहरण: 
class-name :: function-name;

Friend Functions: यह फंक्शन उस परिस्थिति में उपयोग होता है जब दो वर्ग किसी particular function dks share करते हैं। किसी फंक्शन को friend बनाना के लिए उस फंक्शन को friend की-वर्ड से वर्ग के अन्दर घोषित करते हैं। इसका कार्यक्षेत्र उस वर्ग में नहीं रहता जिसमें वह friend. की तरह declared है। इस फंक्शन को ऑब्जेक्ट के द्वारा नहीं बुलाया जा सकता है। इसको हम सामान्य फंक्शन की तरह बिना किसी ऑब्जेक्ट की सहायता बुला सकते हैं। इसे वर्ग के public या private भाग में declared किया जा सकता है। प्रायः इसमें objects argument के रूप में होते हैं।

स्थिरांक सदस्य फंक्शन (Constant Member Function): यदि किसी सदस्य फंक्शन से आंकड़ा सदस्य मान के मान में कोई परिवर्तन करने का कार्य नहीं किया जाता को इस प्रकार के सदस्य फंक्शन के लिए const की-वर्ड का प्रयोग किया जाता है। जैसे: 
void mul (int , int) const;
void get_balance () const;

ओपरेटर ओवरलोडिंग: प्रोग्रामिंग भाषा C++ का एक महत्वपूर्ण गुण ऑपरेटर ओवरलोडिंग हैं। इसे Compile Type Polymorphism भी कहा जाता है। ऐसी प्रक्रिया जो एक ऑपरेटर को उसकी अपनी identity गवाये बिना कोई नया विशेष अर्थ प्रदान करती है ऑपरेटर ओवरलोडिंग कहलाती है। ऑपरेटर ओवरलोडिंग प्रोग्रामिंग भाषा C++ के ऑपरेटर को नयी परिभाषा प्रदान करती है इस पद्धति का प्रयोग करके हम अपनी नयी भाषा बना सकते हैं। ऑपरेटर ओवरलोडिंग निम्नांकित ऑपरेटर के अतिरिक्त C++ में प्रयोग होने वाले सभी ऑपरेटर को नयी भाषा प्रदान करने की सुविधा प्रदान करती है।
Class member access operator (. , .*)
Scope resolution operator ( :: )
sizeof operator
Conditional operator ( ?: )

ऑपरेटर को ओवरलोड करने के लिए परिभाषित करना: किसी भी ऑपरेटर को ओवरलोड करने के लिए सबसे पहले वर्ग से उस ऑपरेटर का सम्बन्ध तथा जिस ऑपरेटर को ओवरलोड कर रहे हैं उसका नाम बताना पड़ता है यह कार्य एक विशेष फंक्शन operator के माध्यम से होता है। Operator function का सामान्य रूप:
return type classname :: operator (op-arglist)
{
Function body //task defined
}

विशेषताऐं: फंक्शन operator ( ) के लिए एक विशेष बात यह है कि इसे सदस्य फंक्शन के रूप में प्रयोग करते हैं अथवा friend फंक्शन के रूप में परिभाषित करते हैं। Friend फंक्शन के रूप में यह unary operator के लिए यह एक argument तथा binary operator के लिए दो argument लेता है। सदस्य फंक्शन के रूप में यह unary operator के लिए कोई argument नहीं लेता तथा binary operator के लिए यह argument लेता है।

ओवरलोडिंग की प्रक्रिया निम्नांकित चरणों में की जाती है: सबसे पहले ऐसे वर्ग को घोषित किया जाता है जिसमें वह आंकड़ा प्रकार परिभाषित होता है जिसका प्रयोग ओवरलोडिंग की प्रक्रिया में किया जाना है। वर्ग के public के भाग में operator op ( ) फंक्शन को घोषित किया जाता है यह friend प्रकार का भी हो सकता है। अब वांछित कार्य कराये जाने के लिए operator op ( ) फंक्शन को परिभाषित करना। ओवरलोडिंग ऑपरेटर को निम्नानुसार बुलाया जा सकता है।
op x or x op //unary operation
x op y // binary operation

ऑपरेटर ओवरलोड करने के नियम:  
  • केवल उपलब्ध ऑपरेटर को ओवरलोड किया जा सकता है नये ऑपरेटर नहीं बनाये जा सकते हैं।
  • ओवरलोड ऑपरेटर के पास प्रयोगकर्ता द्वारा परिभाषित एक operand होना चाहिए। 
  • किसी ऑपरेटर के मुलस्वभाव में कोई परिवर्तन नहीं किया जा सकता है। 
  • ओवरलोडेड ऑपरेटर अपने मूल ऑपरेटर के सूत्र का ही प्रयोग करते हैं। 
  • कुछ ऑपरेटर को ओवरलोड नहीं किया जाता है। 
  • कुछ ऑपरेटर को friend फंक्शन बनाकर ओवरलोड नहीं किया जा सकता है। 
  • जब हम binary operator को सदस्य फंक्शन बनाकर ओवरलोड करते हैं तब बांयी ओर वाले operand को सम्बोधित वर्ग का ऑब्जेक्ट होना आवश्यक होता है। 
  • Argument value को परिवर्तित करने का प्रयास नहीं करना चाहिए। 
  • Binary arithmetic operator जैसे +,-,* आदि explicity value return करने चाहिए।
उत्तराधिकार (Inheritance): Reusability वस्तु केन्द्रित प्रोग्रामिंग की सबसे महत्वपूर्ण विशेषता है कि यह सदैव ही अच्छा होता है कि किसी वस्तु को बार-बार बनाने के स्थान पर पहले बनी वस्तु का पुनः प्रयोग किया जा सकें जिसके द्वारा स्मृति तथा समय की बचत, निराशा कम करना तथा विश्वस्नीयता बढ़ाना संभव है. एक नये वर्ग को पुराने वर्ग से प्राप्त करना अथवा व्युत्पन्न करना तथा पुराने वर्ग की समस्त property को पुनः प्रयोग करना ही उत्तराधिकार कहलाता है। Old Class को आधार वर्ग (Base Class) कहते हैं। New Class को व्युत्पन्न वर्ग (Derived Class) कहा जाता है। जब केवल एक ही आधार वर्ग पर आधारित नया व्यूत्पन्न वर्ग बनाया जाता है तो इसे single inheritance कहा जाता है। जब एक नये वर्ग को एक से अधिक पृथक-पृथक उत्तराधिकार प्रदान किया जाता है तो इसे multiple inheritance कहते हैं।

व्युत्पन्न वर्ग को घोषित एवं परिभाषित करना (Derived Classes): व्युत्पन्न वर्ग (Derived Classes) को घोषित एवं परिभाषित करने का कार्य इसके आधार वर्ग से संबंध की व्याख्या के साथ-साथ इसकी अपनी विस्तृत जानकारी देकर किया जाता है।
class derived-class-name : visibility mode base-class-name
{
members of derived class;
};

Private Member को Inherit करना: Private Member को Inherit करने के लिए C++ के नया visibility mode जिसे protected कहा जाता है प्रदान किया है। वर्ग के यदि किसी सदस्य को protected घोषित कर दिया जाए तो यह सदस्य व्युत्पन्न वर्ग के सदस्य फंक्शन द्वारा सीधे-सीधे access किये जा सकते हैं। तथा कोई नया वर्ग इससे व्युत्पन्न भी हो सकता है। यह बाह्य फलन के द्वारा access नहीं हो सकता हैं। इस प्रकार एक वर्ग में निम्नाकित तीन भाग हो सकते हैं:
class alpha
{
private : //optional
................. // visible to its member functions
................. // within its class
protected :
................ //visible to member functions
................ //of its own and derived class
public :
................. //visible to all the functions in the प्रोग्राम

एक्शेप्शन हैण्डलिंग (Exception Handling): यह यदा कदा ही होता है कि कोई प्रोग्राम एक बार में ही सही तरीके से कार्य करे। प्रोग्राम में बहुत सारी गल्ती (bugs) होते हैं। लॉजिकल गलती एवं सिन्टेक्स गलती के सामान्य प्रकार हैं जो सामान्य रूप से पाए जाते हैं। लॉजिकल गलती समस्या एवं उसके समाधान को सही तरीके से न सोचने के कारण होती है। सिन्टेक्स गलती प्रोग्रामिंग भाषा की सही तरीके से न समझने के कारण होती है। इन गलतियों के अलावा भी प्रोग्रामिंग में कुछ समस्याएं आती है। जिन्हें Exception के नाम से जाना जाता है Exception इन टाइम पर होने वाली गलती या अनियत स्थिति है जो प्रोग्राम के (Execution) कार्यान्वित होने पर होती है। जैसे किसी भी नम्बर को 0 से भाग देना या Array की सीमा उलंघन करना आदि। Exception handling C++ भाषा का भाग नहीं है यह नई विशेषता है जो कि C++ भाषा में जोडी गई वर्तमान में सभी कम्पाइलर इस विशेषता को समर्थन करते हैं। Exception handling की क्रियाविधि का प्रमुख उददेश्य exception परिस्थितियों पर exception का पता लगाना एवं उसकी जानकारी देना है जिससे सही निर्णय लिया जा सके । Exception handling में निम्न कार्यों को समाहित किया गया है
  • समस्या को पाना।
  • गलती घटने की जानकारी देना। 
  • गलती सूचनाओं को प्राप्त करना। 
  • सही निर्णय लेना।
एक्सेप्षन हेन्डलिंग क्रिया विधि में मुख्य रूप से तीन की-वर्ड Try, Catch तथा Throw का उपयोग किया जाता है। Try इस ब्लॉक अन्दर उन कोड को रखा जाता है जिसे गलती उत्पन्न होने की सम्भावना रहती है। यदि कोई गलती उत्पन्न होती है तो वह Try ब्लॉक के अन्दर Throw स्टेटमेंट के द्वारा Throw की जाती है Catch ब्लाक की-वर्ड Catch के द्वारा परिभाषित होता है। (Catch) यह ब्लाक try ब्लाक के द्वारा throw किए गए गलती को catch करता है । तथा उसके अनुसार सही निर्णय लेता है।
आभारी टी डी आई एल