कार्य को देखते हुए C++ में const_cast की कार्यप्रणाली को दिखाना है।
const_cast टाइप कास्टिंग ऑपरेटरों में से एक है। इसका उपयोग किसी वस्तु के स्थिर मान को बदलने के लिए किया जाता है या हम कह सकते हैं कि इसका उपयोग किसी वस्तु की निरंतर प्रकृति को दूर करने के लिए किया जाता है।
const_cast का उपयोग उन प्रोग्रामों में किया जा सकता है जिनमें कुछ स्थिर मूल्य वाली कोई वस्तु होती है जिसे कभी-कभी किसी बिंदु पर बदलने की आवश्यकता होती है।
सिंटैक्स
वाक्य रचना इस प्रकार है -
const_cast<प्रकार का नाम>(अभिव्यक्ति)
उदाहरण
इनपुट:x =50const int* y =&xcout<<"पुराना मान है"<<*y<<"\n";int* z=const_cast(y);*z=100;cout <<"नया मान है"<<*y;आउटपुट:पुराना मान 50 हैनया मान 100 है
निम्नलिखित उदाहरण const_cast का मूल उपयोग दिखाता है। यहां हमने int प्रकार का एक निरंतर चर "x" घोषित किया है जिसे 50 का मान दिया गया है और एक अन्य स्थिर सूचक "y" प्रकार int है जो चर "x" पर इंगित करता है।
const_cast का उपयोग करने के लिए एक तीसरा पॉइंटर बनाया जाना है, और यहां हमने उसी डेटा प्रकार का पॉइंटर "z" बनाया है, जो कि int है।
इसलिए जब हम अपने निरंतर सूचक "y" को पास करते हैं, जो स्थिर चर "x" को const_cast में इंगित करता है, और सूचक z को एक मान निर्दिष्ट करता है, तो हम अपने स्थिर सूचक "y" के मान में परिवर्तन करने में सक्षम होते हैं। पी>
इस तरह हम const_cast का उपयोग करके स्थिर मान को 50 से 100 में बदलने में सक्षम थे।
यदि हम "x" के मान को बदलने की कोशिश करते हैं, जो कि पॉइंटर "y" बिना const_cast का उपयोग किए इंगित कर रहा है, तो निम्न त्रुटि दिखाई देगी- "केवल पढ़ने के लिए का असाइनमेंट" स्थान”
निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -
- पहले int प्रकार का एक स्थिर चर बनाएं और इसे कुछ उपयुक्त आकार दें, मान लें कि "a" और इसका मान 20 है।
- फिर एक स्थिर पॉइंटर बनाएं, हम उसी डेटा प्रकार का "बी" कहें और इसे हमारे निरंतर चर "ए" का पता आवंटित करें।
- फिर एक तीसरा पॉइंटर बनाएं, मान लें कि डेटा प्रकार int का "c" const_cast के लिए उपयोग किया जाना है।
- अब हमारे कॉन्स्टेंट पॉइंटर “b” को const_cast में पास करें और इसे हमारे पॉइंटर “c” के बराबर रखें।
- आखिरकार हमारे पॉइंटर “c” के मान में बदलाव करें। यह स्वचालित रूप से उस मान में परिवर्तन करेगा जिस पर हमारा स्थिर सूचक "बी" इंगित कर रहा है।
एल्गोरिदम
स्टार्टस्टेप 1 -> फंक्शन में मुख्य() एक स्थिर इंट घोषित करें a=20 एक स्थिर पॉइंटर घोषित करें int* b=&a एक पॉइंटर घोषित करें int*c =const_cast(b) असाइन करें *c=40Stop पूर्व> उदाहरण
#includeनामस्थान का उपयोग करना std;int main() { const int a =20; कास्ट इंट * बी =&ए; cout<<"पुराना मान है"<<*b<<"\n"; int* c=const_cast (b); *सी=40; cout<<"नया मान है"<<*b; वापसी 0;} आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
पुराना मान 20 हैनया मान 40 हैयहां, निरंतर सूचक "बी" को स्थिर चर "ए" पर मूल्य =20 के साथ इंगित किया जाता है जो अपरिवर्तनीय है। लेकिन एक ही डेटा प्रकार का तीसरा गैर-स्थिर सूचक "c" बनाकर और const_cast का उपयोग करके हम उस स्थिर मान को बदलने में सक्षम हैं।
सूचक "सी" के मूल्य में परिवर्तन के परिणामस्वरूप स्थिर मूल्य 20 में परिवर्तन हुआ जिस पर स्थिर सूचक "बी" इंगित कर रहा था। इसलिए const_cast का उपयोग करने से पहले आउटपुट मान 20 था और इसका उपयोग करने के बाद आउटपुट मान 40 था।
const_cast के अन्य उपयोग
किसी भी प्रोग्राम में, const_cast का उपयोग निरंतर डेटा को किसी अन्य फ़ंक्शन को पास करने के लिए किया जा सकता है जो निरंतर डेटा स्वीकार नहीं करता है।
उदाहरण
#includeनामस्थान का उपयोग कर; int change(int* p2) {रिटर्न (*p2 * 10);}int main() { const int num =100; const int *p =# int *p1 =const_cast (p); cout <<परिवर्तन (पी 1); वापसी 0;} आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
1000निम्न प्रोग्राम दिखाता है कि कैसे हम किसी भी स्थिर डेटा को प्राप्त नहीं करने वाले फ़ंक्शन चेंज () में const_cast का उपयोग करके 100 का एक निरंतर मान पास करने में सक्षम हैं।
परिवर्तन () फ़ंक्शन मान प्राप्त करता है और इसे 10 से गुणा करता है और इसे मुख्य () फ़ंक्शन पर वापस लौटाता है जो अंतिम आउटपुट, यानी 1000 उत्पन्न करता है।
यदि हम बिना const_cast के समान प्रोग्राम चलाते हैं और स्थिर मान को सीधे change() फ़ंक्शन में पास करने का प्रयास करते हैं, तो यह त्रुटियाँ दिखाएगा।