अब तक के सभी उत्तर आपके प्रश्न के विषय पर केंद्रित हैं, जैसा कि कहा गया है, "सी और सी ++ में क्या अंतर है"। वास्तव में, ऐसा लगता है कि आप जानते हैं कि क्या अंतर है, आप बस यह नहीं समझते हैं कि आपको उस अंतर की आवश्यकता क्यों होगी। तो, अन्य उत्तरों ने OO और एनकैप्सुलेशन को समझाने का प्रयास किया।
मैं अभी तक एक और जवाब के साथ झंकार करना चाहता था, क्योंकि आपके प्रश्न के विवरण के आधार पर, मेरा मानना है कि आपको कई कदम वापस लेने की आवश्यकता है।
आप C ++ या OO के उद्देश्य को नहीं समझते हैं, क्योंकि आपके कारण, ऐसा लगता है कि आपके एप्लिकेशन को केवल डेटा संग्रहीत करने की आवश्यकता है। यह डेटा चर में संग्रहीत किया जाता है। "मैं एक चर को दुर्गम क्यों बनाना चाहूंगा? अब मैं इसे और एक्सेस नहीं कर सकता! सब कुछ सार्वजनिक करने से, या बेहतर वैश्विक होने पर, मैं कहीं से भी डेटा पढ़ सकता हूं और कोई समस्या नहीं है।" - और आप सही हैं, उन परियोजनाओं के पैमाने के आधार पर, जो आप वर्तमान में लिख रहे हैं, संभवतः कई समस्याएं नहीं हैं (या हैं, लेकिन आप अभी तक उनके बारे में जागरूक नहीं हुए हैं)।
मुझे लगता है कि मूल प्रश्न जो आपको उत्तर देने की आवश्यकता है, वह यह है: "मैं कभी डेटा क्यों छिपाना चाहूंगा? यदि मैं ऐसा करता हूं, तो मैं इसके साथ काम नहीं कर सकता!" और यही कारण है:
मान लीजिए कि आप एक नई परियोजना शुरू करते हैं, आप अपना पाठ संपादक खोलते हैं और आप लेखन कार्य शुरू करते हैं। हर बार आपको कुछ स्टोर करने की आवश्यकता होती है (बाद में इसे याद रखने के लिए), आप एक चर बनाते हैं। चीजों को सरल बनाने के लिए, आप अपने चरों को वैश्विक बनाते हैं। आपके ऐप का आपका पहला संस्करण शानदार चलता है। अब आप अधिक सुविधाएँ जोड़ना शुरू करते हैं। आपके पास और अधिक फ़ंक्शन हैं, कुछ डेटा जिन्हें आपने अपने नए कोड से पढ़ने की आवश्यकता से पहले संग्रहीत किया है। अन्य चर को संशोधित करने की आवश्यकता है। आप और अधिक कार्य लिखते रहते हैं। आपने जो देखा होगा (या, यदि नहीं, तो आप भविष्य में पूरी तरह से नोटिस करेंगे), जैसा कि आपका कोड बड़ा हो जाता है, आपको अगली सुविधा जोड़ने में अधिक समय और अधिक समय लगता है। और जैसे-जैसे आपका कोड बड़ा होता जाता है, वैसे-वैसे सुविधाओं को जोड़ना कठिन और कठिन होता जाता है, जो काम करता था। क्यों? क्योंकि आपको याद रखने की जरूरत है कि सभी क्या हैंआपके वैश्विक चर स्टोर कर रहे हैं और आपको यह याद रखने की आवश्यकता है कि उन सभी को कहाँ संशोधित किया जा रहा है। और आपको यह याद रखने की आवश्यकता है कि कौन सा फ़ंक्शन ठीक क्रम में कॉल करने के लिए ठीक है और यदि आप उन्हें एक अलग क्रम में कॉल करते हैं , तो आपको त्रुटियां मिल सकती हैं क्योंकि आपके वैश्विक चर अभी तक मान्य नहीं हैं। क्या आपने कभी इसमें भाग लिया है?
आपकी विशिष्ट परियोजनाएं (कोड की लाइनें) कितनी बड़ी हैं? अब किसी प्रोजेक्ट को 5000 से 50000 गुना बड़ा मान लें। साथ ही, इसमें कई लोग काम कर रहे हैं। टीम के सभी लोग कैसे याद कर सकते हैं (या यहां तक कि इस बात से अवगत हैं) कि वे सभी चर क्या कर रहे हैं?
ऊपर मैंने जो बताया वह पूरी तरह से युग्मित कोड का एक उदाहरण है। और समय की सुबह से (मानने का समय 1 जनवरी, 1970 से शुरू हुआ), मानव इन समस्याओं से बचने के उपाय खोज रहा है। जिस तरह से आप उनसे बचते हैं, वह आपके कोड को सिस्टम, सबसिस्टम और कंपोनेंट्स में विभाजित करके और कितने फंक्शंस को डेटा के किसी भी हिस्से तक पहुंचाने तक सीमित करता है। अगर मेरे पास 5 पूर्णांक और एक स्ट्रिंग है जो किसी प्रकार के राज्य का प्रतिनिधित्व करता है, तो क्या मेरे लिए इस राज्य के साथ काम करना आसान होगा यदि केवल 5 फ़ंक्शन सेट / मान प्राप्त करें? या यदि 100 फ़ंक्शन इन समान मानों को सेट / प्राप्त करते हैं? OO भाषाओं (यानी C) के बिना भी, लोग अन्य डेटा से डेटा को अलग करने और कोड के विभिन्न हिस्सों के बीच स्वच्छ पृथक्करण सीमा बनाने पर कड़ी मेहनत कर रहे हैं। जब परियोजना एक निश्चित आकार में हो जाती है, तो प्रोग्रामिंग में आसानी नहीं हो जाती है, "क्या मैं फ़ंक्शन वाई से चर एक्स तक पहुंच सकता हूं",
यही कारण है कि OO अवधारणाओं को पेश किया गया है और यही कारण है कि वे इतने शक्तिशाली हैं। वे आपको अपने डेटा को अपने आप से छिपाने की अनुमति देते हैं और आप इसे उद्देश्य से करना चाहते हैं , क्योंकि कम कोड जो उस डेटा को देखता है, वहाँ कम मौका है, कि जब आप अगली सुविधा जोड़ते हैं, तो आप कुछ तोड़ देंगे। यह एन्कैप्सुलेशन और ओओ प्रोग्रामिंग की अवधारणाओं का मुख्य उद्देश्य है। वे आपको हमारे सिस्टम / सबसिस्टम को और भी अधिक दानेदार बक्सों में तोड़ने की अनुमति देते हैं, एक बिंदु तक, जहाँ, समग्र परियोजना कितनी भी बड़ी क्यों न हो, चर का एक सेट केवल कोड के 50-200 पंक्तियों तक पहुँचा जा सकता है और यह बात है! OO प्रोग्रामिंग के लिए स्पष्ट रूप से बहुत अधिक है, लेकिन, संक्षेप में, यही कारण है कि C ++ आपको निजी / संरक्षित या सार्वजनिक रूप से डेटा / फ़ंक्शन घोषित करने का विकल्प देता है।
OO में दूसरा सबसे बड़ा विचार अमूर्त परतों की अवधारणा है। हालाँकि प्रक्रियात्मक भाषाओं में भी अमूर्तता हो सकती है, सी में, एक प्रोग्रामर को इस तरह की परतें बनाने के लिए एक सचेत प्रयास करना चाहिए, लेकिन C ++ में, जब आप एक वर्ग की घोषणा करते हैं, तो आप स्वचालित रूप से एक अमूर्त परत बनाते हैं (यह अभी भी आपके ऊपर है कि यह अमूर्त है या नहीं) मूल्य को जोड़ देगा या हटा देगा)। आपको अमूर्त परतों के बारे में अधिक पढ़ना / शोध करना चाहिए और यदि आपके पास अधिक प्रश्न हैं, तो मुझे यकीन है कि यह मंच उन लोगों को भी जवाब देने के लिए खुश होगा।