दिया गया कार्य C++ में const_cast के कार्य को दिखाना है।
const_cast टाइप कास्टिंग ऑपरेटर्स में से एक है। इसका उपयोग किसी ऑब्जेक्ट के स्थिर मान को बदलने के लिए किया जाता है या हम कह सकते हैं कि इसका उपयोग किसी ऑब्जेक्ट की स्थिर प्रकृति को हटाने के लिए किया जाता है।
const_cast का उपयोग उन प्रोग्राम्स में किया जा सकता है जिनमें किसी ऑब्जेक्ट का कुछ स्थिर मान होता है जिसे कभी-कभी किसी बिंदु पर बदलने की आवश्यकता होती है।
सिंटैक्स
सिंटैक्स इस प्रकार है −
const_cast<type name>(expression)
उदाहरण
Input: const int x = 50; const int* y = &x; cout<<"old value is"<<*y<<"\n"; int* z=const_cast<int *>(y); *z=100; cout<<"new value is"<<*y; Output: old value is 50 new value is 100
निम्न उदाहरण const_cast के बुनियादी उपयोग को दर्शाता है। यहां हमने टाइप int का एक स्थिर वेरिएबल "x" घोषित किया है जिसे 50 का मान असाइन किया गया है और टाइप int का एक और स्थिर पॉइंटर "y" जो वेरिएबल "x" पर इशारा करता है।
const_cast का उपयोग करने के लिए एक तीसरे पॉइंटर को बनाना होगा, और यहां हमने उसी डेटा टाइप का पॉइंटर "z" बनाया है, यानी int।
तो जब हम अपने स्थिर पॉइंटर "y" को, जो स्थिर वेरिएबल "x" पर इशारा करता है, const_cast में पास करते हैं, और पॉइंटर z को एक मान असाइन करते हैं, तो हम अपने स्थिर पॉइंटर "y" के मान में बदलाव करने में सक्षम होते हैं।
इस तरह हम const_cast का उपयोग करके स्थिर मान को 50 से 100 में बदलने में सक्षम थे।
यदि हम const_cast का उपयोग किए बिना "x" के मान को बदलने का प्रयास करते हैं जिस पर पॉइंटर "y" इशारा करता है, तो निम्न त्रुटि दिखाई जाएगी-"assignment of read-only location"
उदाहरण
Input: const int x = 50; const int* y = &x; cout<<"old value is"<<*y<<"\n"; int* z=const_cast<int *>(y); *z=100; cout<<"new value is"<<*y; Output: old value is
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है −
- पहले टाइप int का एक स्थिर वेरिएबल बनाएं और इसे कुछ उपयुक्त आकार दें, मान लें "a" और इसका मान 20 हो।
- फिर उसी डेटा टाइप का एक स्थिर पॉइंटर बनाएं, मान लें "b" और इसे हमारे स्थिर वेरिएबल "a" का एड्रेस आवंटित करें।
- फिर टाइप int का एक तीसरा पॉइंटर बनाएं, मान लें "c" जिसका उपयोग const_cast के लिए किया जाएगा।
- अब हमारे स्थिर पॉइंटर "b" को const_cast में पास करें और इसे हमारे पॉइंटर "c" के बराबर रखें।
- अंत में हमारे पॉइंटर "c" के मान में बदलाव करें। यह स्वचालित रूप से उस मान में बदलाव करेगा जिस पर हमारा स्थिर पॉइंटर "b" इशारा कर रहा है।
एल्गोरिदम
Start Step 1 -> In function main() Declare a constant int a=20 Declare a constant pointer int* b=&a Declare a pointer int*c = const_cast<int *>(b) Assign *c=40 Stop
उदाहरण
#include <iostream> using namespace std; int main() { const int a = 20; const int* b = &a; cout<<"old value is"<<*b<<"\n"; int* c=const_cast<int *>(b); *c=40; cout<<"new value is"<<*b; return 0; }आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा −
old value is 20 new value is 40
यहां, स्थिर पॉइंटर "b" मान=20 वाले स्थिर वेरिएबल "a" पर इशारा करता है जिसे बदला नहीं जा सकता। लेकिन उसी डेटा टाइप के एक तीसरे नॉन-स्थिर पॉइंटर "c" को बनाकर और const_cast का उपयोग करके हम उस स्थिर मान को बदलने में सक्षम हैं।
पॉइंटर "c" के मान का परिवर्तन उस स्थिर मान 20 में परिवर्तन का परिणाम देता है जिस पर स्थिर पॉइंटर "b" इशारा कर रहा था। इसलिए const_cast का उपयोग करने से पहले आउटपुट मान 20 था और इसका उपयोग करने के बाद आउटपुट मान 40 था।
const_cast के अन्य उपयोग
किसी भी प्रोग्राम में, const_cast का उपयोग स्थिर डेटा को दूसरी फ़ंक्शन में पास करने के लिए किया जा सकता है जो स्थिर डेटा स्वीकार नहीं करता।
उदाहरण
#include <iostream> using namespace std; int change(int* p2) { return (*p2 * 10); } int main() { const int num = 100; const int *p = # int *p1 = const_cast <int *>(p); cout << change(p1); return 0; }आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा −
1000
निम्न प्रोग्राम दर्शाता है कि कैसे हम const_cast का उपयोग करके 100 के स्थिर मान को change() फ़ंक्शन में पास करने में सक्षम हैं जो कोई स्थिर डेटा प्राप्त नहीं करता।
change() फ़ंक्शन मान प्राप्त करता है और इसे 10 से गुणा करता है और इसे main() फ़ंक्शन में वापस लौटाता है जो अंतिम आउटपुट उत्पन्न करता है, जो 1000 है।
यदि हम const_cast के बिना उसी प्रोग्राम को चलाते हैं और स्थिर मान को सीधे change() फ़ंक्शन में पास करने का प्रयास करते हैं, तो यह त्रुटियां दिखाएगा।