classes objects c
C ++ में कक्षाओं और वस्तुओं का संक्षिप्त परिचय।
क्लास और ऑब्जेक्ट C ++ में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के बिल्डिंग ब्लॉक हैं। प्रत्येक इकाई, जीवित या निर्जीव को एक वस्तु के रूप में दर्शाया जा सकता है और C ++ का उपयोग करके तदनुसार प्रोग्राम किया जा सकता है। इस प्रकार कार, डेस्क, व्यक्ति, पक्षी, पशु आदि जैसी संस्थाओं को वस्तुओं के रूप में दर्शाया जा सकता है।
क्लास ऑब्जेक्ट से अधिक एक स्तर है और वस्तुओं की श्रेणी का प्रतिनिधित्व करता है। इस प्रकार, क्लास एक ब्लूप्रिंट के रूप में कार्य करता है जो ऑब्जेक्ट डिज़ाइन और विवरण को रेखांकित करता है। इसमें वह डेटा शामिल है जिसका उपयोग ऑब्जेक्ट और विभिन्न तरीकों या कार्यों का वर्णन करने के लिए किया जाता है जो ऑब्जेक्ट डेटा पर कार्य कर सकते हैं।
=> यहाँ सरल सी ++ प्रशिक्षण श्रृंखला देखें।
इस ट्यूटोरियल में, हम C ++ में क्लास और ऑब्जेक्ट्स के सभी विवरणों के साथ उनके प्रोग्रामेटिक प्रतिनिधित्व के बारे में चर्चा करते हैं।
आप क्या सीखेंगे:
- कक्षाओं
- वस्तुओं
- स्पेसिफिकेशन्स एक्सेस करें
- कंस्ट्रक्टर्स
- कंस्ट्रक्टर्स के प्रकार
- असाइनमेंट ऑपरेटर
- नष्ट करने वाला
- 'यह' सूचक
- निष्कर्ष
- अनुशंसित पाठ
कक्षाओं
C ++ में एक क्लास को एक खाका या किसी विशेष इकाई के कंकाल के रूप में देखा जा सकता है। क्लास एक उपयोगकर्ता-परिभाषित डेटा प्रकार है। इसमें उस विशेष इकाई के लिए सामान्य जानकारी या डेटा और उस इकाई पर काम करने वाले कार्य शामिल हैं।
C ++ सिंटैक्स में, हम एक वर्ग को कीवर्ड 'क्लास' के साथ परिभाषित करते हैं, उसके बाद क्लास का नाम आता है।
कक्षा के नाम का वर्णन घुंघराले ब्रेसिज़ में संलग्न वर्ग के विवरण के साथ किया जाता है और इसे अर्धविराम द्वारा समाप्त किया जाता है।
निम्न ब्लॉक वर्ग परिभाषा के लिए सामान्य वाक्यविन्यास दिखाता है।
जैसा कि उपरोक्त प्रतिनिधित्व में दिखाया गया है, वर्ग में सार्वजनिक / संरक्षित / निजी जैसे पहुंच विनिर्देशक हो सकते हैं। इसमें डेटा सदस्य और सदस्य फ़ंक्शन हो सकते हैं। डेटा और कार्यों को कक्षा के सदस्यों के रूप में कहा जाता है। डिफ़ॉल्ट रूप से, सदस्य कक्षा के लिए निजी होते हैं, ताकि किसी बाहरी संस्था की इन सदस्यों तक पहुंच न हो।
उदाहरण के लिए, एक वाहन एक सामान्यीकृत वर्ग हो सकता है जिसमें एक मॉडल, रंग, चेसिस नं।, औसत_स्पीड, आदि जैसे गुण हो सकते हैं। इसमें परिवर्तन जैसे कार्य, गति, मंदी आदि हो सकते हैं, जो डेटा सदस्यों पर कार्रवाई करते हैं। हम 'वाहन' नामक एक वर्ग को परिभाषित कर सकते हैं जिसमें ये सभी डेटा सदस्य और फ़ंक्शन होंगे।
जैसा कि पहले ही उल्लेख किया गया है, एक वर्ग सिर्फ संस्थाओं के लिए एक खाका है। यह परिभाषित होने पर स्मृति में कोई स्थान नहीं लेता है। कक्षा के कार्यशील होने के लिए, हमें उन वस्तुओं को परिभाषित करना होगा जो कक्षा के सदस्यों का उपयोग कर सकें।
वस्तुओं
कक्षा की कार्यक्षमता का उपयोग करने के लिए, हमें ऑब्जेक्ट बनाने के लिए क्लास को तुरंत करने की आवश्यकता है। एक वस्तु एक वर्ग का एक उदाहरण है। मैं सरल शब्दों में, हम कह सकते हैं कि एक वस्तु प्रकार वर्ग का एक चर है।
ऑब्जेक्ट बनाने का सामान्य सिंटैक्स है:
classname object_name;
एक बार ऑब्जेक्ट बनने के बाद, इसका उपयोग उस वर्ग के डेटा सदस्यों और कार्यों तक पहुंचने के लिए किया जा सकता है।
वर्ग (डेटा और फ़ंक्शंस) के सदस्यों का एक्सेस डॉट (।) ऑपरेटर का उपयोग करके किया जाता है, जिसे सदस्य एक्सेस ऑपरेटर भी कहा जाता है।
यदि obj ऑब्जेक्ट का नाम है और क्लास में एक फंक्शन 'डिस्प्ले ()' है, तो फंक्शन को 'obj.display ()' के रूप में एक्सेस किया जा सकता है।
हालाँकि, उपरोक्त कथन में एक पकड़ है। यदि फ़ंक्शन 'सार्वजनिक' है, तो हम ऑब्जेक्ट और डॉट ऑपरेटर का उपयोग करके फ़ंक्शन डिस्प्ले () तक पहुंच सकते हैं।
स्पेसिफिकेशन्स एक्सेस करें
C ++ में, वर्ग में डेटा सदस्यों और कार्यों तक पहुँच उस विशेष डेटा सदस्य को दिए गए एक्सेस या एक्सेस स्पेसियर का उपयोग करके कार्य करने पर निर्भर करता है।
C ++ निम्नलिखित पहुँच निर्दिष्टकों का समर्थन करता है:
# 1) निजी
यह C ++ में क्लास के लिए डिफ़ॉल्ट एक्सेस स्पेसियर है। इसका मतलब यह है कि यदि किसी वर्ग में सदस्यों के लिए कोई पहुंच निर्दिष्ट नहीं है, तो इसे निजी माना जाता है।
जब कोई सदस्य निजी होता है, तो उसे कक्षा से बाहर नहीं पहुँचा जा सकता है। ऑब्जेक्ट और डॉट ऑपरेटर का उपयोग भी नहीं। निजी डेटा सदस्यों को केवल कक्षा के सदस्य कार्यों का उपयोग करके एक्सेस किया जा सकता है।
सबसे अच्छा मुफ्त वीडियो कनवर्टर क्या है
हालाँकि, इस नियम का एक अपवाद है, जिसकी चर्चा हम अपने बाद के विषयों में करेंगे।
# 2) सार्वजनिक
एक डेटा सदस्य या फ़ंक्शन जिसे कक्षा में सार्वजनिक के रूप में परिभाषित किया गया है वह कक्षा के बाहर सभी के लिए सुलभ है। इन सदस्यों को ऑब्जेक्ट और डॉट ऑपरेटर का उपयोग करके एक्सेस किया जा सकता है।
# 3) संरक्षित
किसी कक्षा का एक संरक्षित सदस्य कक्षा के लिए और उस कक्षा के बाल वर्ग के लिए सुलभ है।
यह पहुंच विनिर्देश विशेष रूप से विरासत के मामले में उपयोग किया जाता है और हम इस विषय पर विस्तार से चर्चा करेंगे, जबकि विरासत विषय पर चर्चा करेंगे।
आइए हम इन उदाहरणों को समझने के लिए निम्नलिखित उदाहरण लें।
#include #include using namespace std; class ABC{ int var1 = 10; public: string name; void display() { cout<<'var1 ='< आउटपुट:
var1 = 10
नाम = sth
इस कार्यक्रम में, हमारे पास दो डेटा सदस्य हैं, जिनमें से var1 का प्रकार निजी है (पहुंच निर्दिष्ट नहीं है। डिफ़ॉल्ट निजी है)। एक अन्य सदस्य स्ट्रिंग नाम है, जिसे सार्वजनिक घोषित किया जाता है। हमारे पास अभी तक एक और फ़ंक्शन डिस्प्ले है जो इन दोनों सदस्यों के मूल्य को प्रदर्शित करता है।
मुख्य फ़ंक्शन में, हम क्लास एबीसी के एक ऑब्जेक्ट एबीसी की घोषणा करते हैं। फिर हम डेटा सदस्यों के लिए मान सेट करते हैं और ऑब्जेक्ट 'एबीसी' का उपयोग करके कॉल फ़ंक्शन डिस्प्ले भी करते हैं।
हालाँकि, जब संकलक लाइन का सामना करता है abc.var1 = 20; यह एक त्रुटि उत्पन्न करेगा कि 'var1 निजी चर है'।
इसका कारण यह है कि हम कक्षा के बाहर किसी वर्ग के निजी डेटा सदस्यों तक नहीं पहुँच सकते। इस प्रकार एक त्रुटि है। लेकिन हम इसे फंक्शन के अंदर एक्सेस कर सकते हैं और इसलिए जब हम डिस्प्ले फंक्शन में var1 की वैल्यू आउटपुट करते हैं; यह कोई त्रुटि नहीं है।
इसलिए कार्यक्रम का आउटपुट प्रारंभिक मूल्य प्रदर्शित करता है जिसके साथ var1 घोषित किया गया है।
अब तक, हमने कक्षाओं, वस्तु और पहुंच विवरणों के बारे में विवरण देखा है, अब हम एक नमूना वर्ग के छात्र का पूरा उदाहरण लेते हैं। इस वर्ग में डेटा सदस्य हैं: student_id, student_name, और student_age। इसमें छात्र जानकारी पढ़ने और छात्र जानकारी प्रदर्शित करने के लिए सदस्य कार्य भी हैं।
पाठकों के लिए चीजों को आसान बनाने के लिए, हमने कक्षा के सभी सदस्यों को सार्वजनिक घोषित किया है।
निम्नलिखित कार्यक्रम पूर्ण कार्यान्वयन को दर्शाता है।
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; void read_studentInfo(); void print_studentInfo() { cout<<'
Student ID : '<student_id; cout<>student_name; cout<>student_age; } int main() { student s1; s1.read_studentInfo(); s1.print_studentInfo(); }
आउटपुट:
छात्र आईडी दर्ज करें: 1
Student_name दर्ज करें: abc
दर्ज करें student_age: 12
छात्र आईडी: १
छात्र का नाम: एबीसी
छात्र आयु: 12
इस प्रकार, हमारे पास ऊपर परिभाषित एक पूरा वर्ग है। एकमात्र उल्लेखनीय अंतर यह है कि हमने कक्षा के अंदर एक फ़ंक्शन 'Print_studentInfo' को परिभाषित किया है, जबकि अन्य फ़ंक्शन 'read_studentinfo' को कक्षा के बाहर परिभाषित किया गया है। ये दो तरीके हैं जिनमें सदस्य कार्यों को एक वर्ग के लिए परिभाषित किया जा सकता है।
ध्यान दें कि जो फ़ंक्शन बाहर परिभाषित किया गया है वह अभी भी कक्षा के अंदर एक घोषणा / प्रोटोटाइप है। इसके अलावा, इसे कक्षा के बाहर परिभाषित किया गया है गुंजाइश रिज़ॉल्यूशन ऑपरेटर: (:) । फिर मुख्य फ़ंक्शन में, हम एक छात्र वर्ग ऑब्जेक्ट बनाते हैं और फिर हम डेटा को पढ़ने और प्रदर्शित करने के लिए फ़ंक्शन कहते हैं।
कंस्ट्रक्टर्स
अब तक इस ट्यूटोरियल में, हमने एक साधारण ऑब्जेक्ट बनाया है और फिर हम मानक इनपुट से इन मानों को पढ़ने के बाद मुख्य फ़ंक्शन में कक्षा के प्रत्येक डेटा सदस्य को मान प्रदान करते हैं।
इस विषय में, हम एक विशेष फ़ंक्शन पर एक नज़र डालेंगे जिसका उपयोग इसके निर्माण के दौरान ऑब्जेक्ट को इनिशियलाइज़ करने के लिए किया जाता है। इस विशेष कार्य को कंस्ट्रक्टर कहा जाता है।
एक निर्माणकर्ता वर्ग का एक सदस्य कार्य है लेकिन यह सामान्य सदस्य फ़ंक्शन से निम्न तरीकों से भिन्न होता है:
- कंस्ट्रक्टर का कोई रिटर्न वैल्यू नहीं होता है यानी कंस्ट्रक्टर कभी भी वैल्यू नहीं देता है।
- यह वर्ग का एक सार्वजनिक सदस्य कार्य है।
- इसका उपयोग डेटा सदस्यों को आरंभ करने और कक्षा के ऑब्जेक्ट के निर्माण के लिए किया जाता है।
- यह कंपाइलर द्वारा स्वचालित रूप से कॉल किया जाता है जब ऑब्जेक्ट बनाया जा रहा है।
कंस्ट्रक्टर्स के प्रकार
C ++ निम्न प्रकार के निर्माणकर्ताओं का समर्थन करता है।
# 1) डिफ़ॉल्ट कंस्ट्रक्टर
एक डिफॉल्ट कंस्ट्रक्टर बेसिक कंस्ट्रक्टर होता है और इसका कोई पैरामीटर नहीं होता है। हम डिफॉल्ट कंस्ट्रक्टर का उपयोग करके बिना किसी पैरामीटर के एक साधारण ऑब्जेक्ट बना सकते हैं।
डिफ़ॉल्ट निर्माता में निम्नलिखित सिंटैक्स होता है:
classname() { //constructor code }
यदि किसी क्लास में डिफॉल्ट कंस्ट्रक्टर नहीं है तो कंपाइलर उसे बनाता है।
# 2) परिमापक संवाहक
एक पैरामीटर निर्मित निर्माता वह है जिसमें एक पैरामीटर सूची होती है, जिसके उपयोग से हम वर्ग के सदस्यों को आरंभ कर सकते हैं। जब हम किसी पैरामीटर के निर्माणकर्ता में एक वस्तु की घोषणा करते हैं, तो हमें कंस्ट्रक्टर फ़ंक्शन के लिए प्रारंभिक मानों को पैरामीटर के रूप में पारित करने की आवश्यकता होती है।
एक पैरामीटर निर्मित निर्माता फ़ंक्शन नीचे दिखाया गया है।
classname(argument list){ //constructor code }
एक पैरामीटराइज्ड कंस्ट्रक्टर का इस्तेमाल कंस्ट्रक्टरों को ओवरलोड करने के लिए किया जाता है। हम अपने बाद के विषयों में ओवरलोडिंग के बारे में अधिक देखेंगे।
अलग-अलग ऑब्जेक्ट के डेटा सदस्यों को इनिशियलाइज़ करने के उद्देश्य से एक पैरामीटराइज्ड कंस्ट्रक्टर का उपयोग किया जाता है। ऐसा करते समय, हम डेटा सदस्यों के विभिन्न मूल्यों को अलग-अलग ऑब्जेक्ट में पास कर सकते हैं।
# 3) कॉपी कंस्ट्रक्टर्स
C ++ एक तीसरे प्रकार के कंस्ट्रक्टर का समर्थन करता है जिसे कॉपी कंस्ट्रक्टर के रूप में जाना जाता है। इसका सामान्य रूप है
classname (const classname & obj);
जैसा कि उपरोक्त घोषणा में दिखाया गया है, कॉपी कंस्ट्रक्टर में उसी वर्ग के किसी अन्य ऑब्जेक्ट के मूल्यों का उपयोग करके एक नई वस्तु बनाई जाती है। जो पैरामीटर कंस्ट्रक्टर को पास किया जाता है वह किसी ऑब्जेक्ट का निरंतर संदर्भ होता है, जिसका मान नई ऑब्जेक्ट के निर्माण के लिए उपयोग किया जाएगा।
एक कॉपी कंस्ट्रक्टर को आमतौर पर निम्नलिखित स्थितियों में कहा जाता है:
आप एक xml फ़ाइल कैसे खोलते हैं
- जब कोई क्लास ऑब्जेक्ट मान द्वारा वापस किया जाता है।
- जब किसी फ़ंक्शन को एक तर्क के रूप में पास किया जाता है और मान द्वारा पास किया जाता है।
- जब किसी वस्तु का निर्माण उसी वर्ग की किसी अन्य वस्तु से किया जाता है।
- जब संकलक द्वारा एक अस्थायी वस्तु उत्पन्न की जाती है।
हालाँकि, हम इस बात की गारंटी नहीं दे सकते हैं कि कॉपी कंस्ट्रक्टर को उपरोक्त सभी मामलों में बुलाया जाएगा क्योंकि C ++ कंपाइलर के पास कॉपी ऑपरेशन को ऑप्टिमाइज़ करने का एक तरीका है।
एक कॉपी कंस्ट्रक्टर ऑब्जेक्ट के बीच मेंबरवाइज कॉपी कैरी करता है। डिफॉल्ट कंस्ट्रक्टर की तरह, C ++ कंपाइलर एक डिफॉल्ट कॉपी कंस्ट्रक्टर बनाता है यदि हम अपने प्रोग्राम में एक भी उपलब्ध नहीं कराते हैं। लेकिन जब किसी वर्ग में कुछ डेटा सदस्य जैसे संकेत, संदर्भ या संसाधनों का कोई रनटाइम आवंटन होता है, तो हमें अपना उपयोगकर्ता-परिभाषित कॉपी कंस्ट्रक्टर होना चाहिए।
कारण यह है कि डिफ़ॉल्ट कॉपी कंस्ट्रक्टर केवल डेटा सदस्यों की एक उथली प्रतिलिपि करता है यानी दोनों ऑब्जेक्ट एक ही मेमोरी लोकेशन को साझा करेंगे। यह साधारण गैर-पॉइंटर डेटा सदस्यों के लिए ठीक है।
हालाँकि, जब यह संकेतकर्ताओं या किसी अन्य गतिशील डेटा सदस्यों की बात आती है, तो हम चाहेंगे कि डेटा को एक नए मेमोरी लोकेशन पर इंगित किया जाए। यह गहरी कॉपी है और इसे केवल उपयोगकर्ता द्वारा परिभाषित कॉपी कंस्ट्रक्टर के उपयोग से प्राप्त किया जा सकता है।
एक पूर्ण C ++ प्रोग्राम के नीचे दिया गया है जो सभी तीन प्रकार के कंस्ट्रक्टर्स को लागू करता है और एक ऑब्जेक्ट के निर्माण में उनके उपयोग को दर्शाता है।
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; //default constructor student(){ student_id = 1; student_name = 'abc'; student_age = 10; } //parameterized constructor student(int id,string name,int age){ student_id = id; student_name = name; student_age = age; } //copy constructor student(const student& st){ student_id = st.student_id; student_name = st.student_name; student_age = st.student_age; } void print_studentInfo() { cout<<'
Student ID : '< आउटपुट:
********** एस **********
छात्र आईडी: १
छात्र का नाम: एबीसी
छात्र आयु: १०
********** s2 **********
छात्र आईडी: 2
छात्र का नाम: xyz
छात्र आयु: 12
उसी के लिए स्क्रीनशॉट नीचे दिया गया है।

इस कार्यक्रम में, हमने एक कक्षा के छात्र को परिभाषित किया है जो पिछले कार्यक्रम में परिभाषित एक के समान है। अंतर यह है कि एक फ़ंक्शन के माध्यम से मानक इनपुट से डेटा सदस्य मान पढ़ने के बजाय, हम तीन कंस्ट्रक्टर को परिभाषित करते हैं।
एक वर्ग के लिए एक से अधिक निर्माणकर्ता होना पूरी तरह से संभव है। हमारे पास एक डिफ़ॉल्ट कंस्ट्रक्टर है जो डेटा सदस्यों को प्रारंभिक मानों को शुरू करता है। अगला, हम एक पैरामीटर निर्मित कंस्ट्रक्टर को परिभाषित करते हैं जो प्रारंभिक मानों को कंस्ट्रक्टर के मापदंडों के रूप में पास करता है।
इसके बाद, हम एक कॉपी कंस्ट्रक्टर को परिभाषित करते हैं, जिसे हम छात्र वर्ग के ऑब्जेक्ट के लिए एक निरंतर संदर्भ पास करते हैं।
मुख्य फ़ंक्शन में, हम तीन कंस्ट्रक्टर्स का उपयोग करके अलग से तीन ऑब्जेक्ट बनाते हैं। डिफ़ॉल्ट ऑब्जेक्ट का उपयोग करके पहला ऑब्जेक्ट बनाया जाता है। दूसरा ऑब्जेक्ट s1 को पैरामीटराइज्ड कंस्ट्रक्टर के उपयोग से बनाया गया है जबकि तीसरा ऑब्जेक्ट s2 एक कॉपी कंस्ट्रक्टर का उपयोग करके बनाया गया है।
तीसरी वस्तु s2 के निर्माण पर ध्यान दें। यहां हम नई ऑब्जेक्ट s2 में पहले से निर्मित ऑब्जेक्ट s1 असाइन करते हैं। इस प्रकार जब हम पहले से मौजूद वस्तु का उपयोग करके एक नई वस्तु का निर्माण करते हैं, तो एक कॉपी कंस्ट्रक्टर को कंपाइलर द्वारा बुलाया जाता है।
असाइनमेंट ऑपरेटर
हम असाइनमेंट ऑपरेटर (=) का उपयोग करके एक ऑब्जेक्ट के मूल्यों को दूसरे को भी असाइन कर सकते हैं। इस मामले में, हमारे पास s1 = s जैसा बयान होगा।
कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर के बीच अंतर यह है कि जबकि कॉपी कंस्ट्रक्टर पूरी तरह से एक नई ऑब्जेक्ट का निर्माण करता है, असाइनमेंट ऑपरेटर एलएचएस पर ऑब्जेक्ट के आरएचएस पर ऑब्जेक्ट के एक सदस्य के मूल्यों को असाइन करता है। इसका मतलब यह है कि असाइनमेंट ऑपरेटर के दोनों तरफ की वस्तुओं को असाइनमेंट से पहले मौजूदा होना चाहिए।
नष्ट करने वाला
एक विध्वंसक एक निर्माणकर्ता की तरह एक विशेष कार्य भी है लेकिन यह कार्यक्षमता को लागू करता है जो कि निर्माणकर्ता के बिल्कुल विपरीत है। जबकि कंस्ट्रक्टर का उपयोग ऑब्जेक्ट बनाने के लिए किया जाता है, एक विध्वंसक का उपयोग ऑब्जेक्ट को नष्ट करने या हटाने के लिए किया जाता है।
विध्वंसक की कुछ विशेषताओं में शामिल हैं:
- एक विध्वंसक नाम क्लासनाम के समान है लेकिन एक टिल्ड (~) चिन्ह के साथ शुरू होता है।
- विध्वंसक के पास कोई वापसी प्रकार नहीं है।
- एक विध्वंसक के पास कोई तर्क नहीं है।
- एक कक्षा में केवल एक विध्वंसक हो सकता है।
- कंपाइलर हमेशा एक डिफॉल्ट डिस्ट्रक्टर बनाता है यदि हम एक क्लास के लिए एक प्रदान करने में विफल होते हैं।
एक विध्वंसक का सामान्य सिंटैक्स है:
~classname(){ //cleanup code }
एक वर्ग के विध्वंसक को आमतौर पर निम्नलिखित स्थितियों में कहा जाता है:
- जब ऑब्जेक्ट दायरे से बाहर हो जाता है, तो क्लास डिस्ट्रक्टर को स्वचालित रूप से कहा जाता है।
- इसी तरह, जब प्रोग्राम का निष्पादन पूरा हो जाता है, तो विध्वंसक को कहा जाता है। इसका मतलब यह है कि सभी वस्तुओं का अस्तित्व भी समाप्त हो जाता है। इसलिए, प्रत्येक वस्तु का विनाशकर्ता कहा जाएगा।
- किसी ऑब्जेक्ट को हटाने के लिए ‘डिलीट’ ऑपरेटर द्वारा किए जाने पर वर्ग के विध्वंसक को भी कहा जाता है।
- हम ऑब्जेक्ट की कार्यक्षमता के साथ होने के बाद किसी भी सफाई गतिविधियों को करने के लिए विध्वंसक को स्पष्ट रूप से कॉल कर सकते हैं।
नीचे दिया गया उदाहरण विनाशकारी के काम को दर्शाता है।
#include using namespace std; class sample{ public: sample(){ cout<<'Constructor::sample called'< आउटपुट:
कंस्ट्रक्टर :: नमूना कहा जाता है
यह नमूना वर्ग है
विध्वंसक :: ~ नमूना कहा जाता है
उपरोक्त आउटपुट के लिए स्क्रीनशॉट नीचे दिया गया है।

हमने एक क्लास सैंपल को परिभाषित किया है जिसमें हमने एक कंस्ट्रक्टर, एक डिस्ट्रक्टर और एक फंक्शन डिस्प्ले को परिभाषित किया है। मुख्य फ़ंक्शन में, हम क्लास सैंपल का ऑब्जेक्ट ओब्जेक्ट बनाते हैं और फिर इस ऑब्जेक्ट पर डिस्प्ले फ़ंक्शन को कॉल करते हैं।
उसके बाद, एक रिटर्न 0 निष्पादित किया जाता है। आउटपुट में, हम देख सकते हैं कि जब प्रदर्शन फ़ंक्शन वापस आता है और प्रोग्राम कंट्रोल स्टेटमेंट रिटर्न 0 पर आता है, तो विध्वंसक को निष्पादित किया जाता है। इसका मतलब यह है कि यह उस क्षण को निष्पादित किया जाता है जब ऑब्जेक्ट दायरे से बाहर हो जाता है।
'यह' सूचक
C ++ वस्तुओं से संबंधित एक विशेष अवधारणा का उपयोग करता है, जिसे 'इस' सूचक के रूप में जाना जाता है। 'यह' सूचक हमेशा वर्तमान वस्तु की ओर इशारा करता है। इस प्रकार स्थिति के आधार पर, जब भी हमें वर्तमान वस्तु को संदर्भित करना होता है, हम 'इस' सूचक का उपयोग करते हैं।
हम जानते हैं कि हर बार जब कक्षा का उदाहरण यानि ऑब्जेक्ट बनाया जाता है, तो ऑब्जेक्ट के लिए क्लास के डेटा सदस्यों की एक अलग कॉपी बनाई जाती है। लेकिन जब कक्षा के सदस्य कार्यों की बात आती है, तो सभी ऑब्जेक्ट एक ही प्रतिलिपि साझा करते हैं।
इसलिए जब एक या अधिक ऑब्जेक्ट एक साथ सदस्य फ़ंक्शन तक पहुंचते हैं, तो हम यह कैसे सुनिश्चित करते हैं कि उचित डेटा सदस्य सदस्य फ़ंक्शन द्वारा एक्सेस और संशोधित किए जाते हैं?
एमपी 3 प्लेयर के लिए मुफ्त एमपी 3 संगीत डाउनलोड
यह वह स्थान है जहाँ 'यह' सूचक क्रिया में आता है। कंपाइलर फ़ंक्शन नाम के साथ एक अंतर्निहित सूचक को 'इस' के रूप में पास करता है। इसे 'यह' सूचक कहा जाता है।
'इस' सूचक को सभी सदस्य फ़ंक्शन कॉल के लिए छिपे हुए तर्क के रूप में पारित किया जाता है। यह आमतौर पर एक स्थानीय चर है। इसलिए, 'यह' सूचक एक स्थिर सूचक है और इसकी सामग्री वर्तमान वस्तु का मेमोरी एड्रेस है।
ध्यान दें कि यह सूचक केवल गैर-स्थैतिक सदस्य कार्यों के लिए उपलब्ध है, न कि स्थैतिक कार्यों के लिए। ऐसा इसलिए है क्योंकि स्थैतिक कार्यों को किसी ऑब्जेक्ट का उपयोग करके एक्सेस करने की आवश्यकता नहीं है। उन्हें सीधे क्लासनाम का उपयोग करके एक्सेस किया जा सकता है।
हम आमतौर पर 'इस' सूचक का उपयोग उन स्थितियों में करते हैं जहां सदस्य चर और पैरामीटर उसी नाम को साझा करने वाले सदस्य चर को आरंभ करने के लिए पारित किए जाते हैं। जब हम फ़ंक्शन से वर्तमान ऑब्जेक्ट को वापस करने की आवश्यकता होती है तो हम इसका उपयोग भी करते हैं।
हमें नीचे 'इस' सूचक के प्रदर्शन को देखते हैं।
#include using namespace std; class Sample { private: int num; char ch; public: Sample &setParam(int num, char ch){ this->num =num; this->ch = ch; return *this; } void printValues(){ cout<<'num = '< आउटपुट:
संख्या = १००
ch = A
उपरोक्त कार्यक्रम में, हमारे पास नमूना नामक एक वर्ग है, जिसमें दो डेटा सदस्यों की संख्या और ch हैं। हमारे पास एक सदस्य फ़ंक्शन सेटपराम है जो सदस्य चर के मूल्यों को निर्धारित करने के लिए समान नाम, संख्या और ch के साथ पैरामीटर पास करता है।
फ़ंक्शन के अंदर, हम इन मानों को इस सूचक द्वारा इंगित वर्तमान ऑब्जेक्ट सदस्य चर पर असाइन करते हैं। एक बार मान सेट हो जाने के बाद, वर्तमान ऑब्जेक्ट 'यह' फ़ंक्शन से वापस आ जाता है।
मुख्य फ़ंक्शन में, हम पहले नमूना वर्ग की एक वस्तु बनाते हैं, मान सेट करने के लिए एक setParam फ़ंक्शन को कॉल करते हैं और फिर मूल्यों को प्रिंट करने के लिए प्रिंटवल्स फ़ंक्शन को कॉल करते हैं।
निष्कर्ष
हमने इस ट्यूटोरियल में C ++ में OOP के बेसिक बिल्डिंग ब्लॉक्स सीखे हैं। वर्गों और वस्तुओं को समझना प्राथमिक आवश्यकताएं हैं, सी + + में ओओपी के साथ शुरू करने के लिए। हमने निर्माणकर्ताओं और विध्वंसक के बारे में भी विस्तार से जाना है।
हमारे आगामी ट्यूटोरियल में, हम C ++ में इनिशलाइज़र सूचियों के बारे में जानेंगे।
=> यहाँ सरल सी ++ प्रशिक्षण श्रृंखला देखें।
अनुशंसित पाठ
- पायथन OOPs अवधारणाओं (पायथन क्लासेस, ऑब्जेक्ट्स और इनहेरिटेंस)
- उदाहरण के साथ जावा इंटरफेस और एब्सट्रैक्ट क्लास ट्यूटोरियल
- VBScript एक्सेल ऑब्जेक्ट्स के साथ काम करना
- QTP ट्यूटोरियल # 7 - QTP की वस्तु पहचान प्रतिमान - QTP वस्तुओं की विशिष्ट पहचान कैसे करता है?
- QTP में ऑब्जेक्ट रिपॉजिटरी - ट्यूटोरियल # 22
- VBScript ADODB कनेक्शन ऑब्जेक्ट्स के साथ कार्य करना
- C ++ में रनटाइम पॉलिमोर्फिज्म
- C ++ में वंशानुक्रम