डेटा प्रकारों को C++ में कैसे परिवर्तित करें

Deta Prakarom Ko C Mem Kaise Parivartita Karem



एक वेरिएबल के डेटा प्रकार को दूसरे में बदलने की प्रक्रिया को C++ में टाइप रूपांतरण या टाइप कास्टिंग के रूप में जाना जाता है। यह विभिन्न डेटा प्रकारों के चरों पर उनके डेटा प्रकारों को एक दूसरे के साथ संगत बनाकर गणितीय संचालन करने के लिए किया जाता है। प्रकार रूपांतरण कोड को अनुकूलित करता है। उदाहरण के लिए, दो चर के बीच अंतर की गणना करते समय, यदि एक संख्या फ्लोट प्रकार में है और दूसरी पूर्णांक डेटा प्रकार में है, तो घटाव को पूरा करने के लिए पूर्णांक डेटा प्रकार को फ्लोट प्रकार में परिवर्तित किया जाएगा।

डेटा प्रकारों को C++ में कैसे परिवर्तित करें

C++ में, डेटा प्रकार बदलने के दो तरीके हैं:

निहित प्रकार रूपांतरण

C++ कोड कंपाइलर द्वारा पूर्वनिर्धारित नियमों के अनुसार, अंतर्निहित प्रकार रूपांतरण उपयोगकर्ता से किसी भी बाहरी ट्रिगर की आवश्यकता के बिना कंपाइलर द्वारा स्वचालित रूप से किया जाने वाला प्रकार रूपांतरण है। इस प्रकार का रूपांतरण आमतौर पर एक प्रोग्राम में तब होता है जब एक से अधिक डेटा प्रकार होते हैं, और डेटा प्रकार की अभिव्यक्ति इस अभिव्यक्ति में शामिल चर के डेटा प्रकार से मेल नहीं खाती है।







रूपांतरण के दौरान डेटा हानि से बचने के लिए, कंपाइलर डिफ़ॉल्ट रूप से कम सटीक डेटा प्रकार को उच्च परिशुद्धता वाले डेटा प्रकार के साथ बदलता है। उदाहरण के लिए, यह डेटा हानि को रोकने के लिए फ़्लोट को पूर्णांक में बदलने के बजाय एक पूर्णांक को फ़्लोट में बदल देगा। इसे प्रमोशन कहते हैं. विभिन्न डेटा प्रकारों के लिए प्राथमिकता आरेख निम्नलिखित है।





प्रकार परिवर्तन हेतु आदेश

प्रकार रूपांतरण का सही क्रम इस प्रकार दिया गया है:





बूल -- > चार -- > संक्षिप्त पूर्णांक -- > पूर्णांक -- > अहस्ताक्षरित int -- > लंबा -- > अहस्ताक्षरित लंबा -- > लम्बा लम्बा -- > तैरना -- > दोहरा -- > लंबा दोहरा

डेटा हानि को रोकने के लिए कम परिशुद्धता प्रकार चर को उच्च परिशुद्धता डेटा प्रकार में परिवर्तित किया जाता है।

उदाहरण 1

इस उदाहरण में, अंतर्निहित प्रकार रूपांतरण का उपयोग करके विभिन्न डेटा प्रकारों के चर पर जोड़ किया जाता है।



#शामिल करें
का उपयोग करते हुए नाम स्थान कक्षा ;

int यहाँ मुख्य ( ) {
int यहाँ संख्या = 100 ;
चार चरित्र = 'सी' ;
अदालत << '100 + 'सी' = ' << संख्या + चरित्र << अंतः ;

तैरना वैल = संख्या + 'सी' ;
अदालत << 'फ्लोट वैल(100 + 'सी') = ' << वैल << अंतः ;

int यहाँ था = 7890 ;
लंबा नहीं था = था ;
अदालत << 'var_int = ' << नहीं था ;
वापस करना 0 ;
}

यहां ASCII तालिका से एक पूर्णांक और एक वर्ण, और एक फ्लोट नंबर और वर्ण 'सी' जोड़ा गया है। पूर्णांक को तीसरे खंड में एक लंबे डेटा प्रकार के रूप में रखा जाता है और डेटा प्रकार को कंपाइलर द्वारा अपने पूर्वनिर्धारित नियमों के आधार पर बदला जाता है।

100 और 'सी' का योग 167 देता है क्योंकि 'सी' संख्याओं में 67 के बराबर होता है और 100+'सी' 199 देता है क्योंकि लोअरकेस 'सी' 99 के बराबर होता है। इंट वेरिएबल एक लंबे डेटा प्रकार में संग्रहीत होता है।

उदाहरण 2

इस उदाहरण में, वर्ण D को विभाजन ऑपरेशन करने के लिए एक फ्लोट में परिवर्तित किया गया है।

#शामिल करें
का उपयोग करते हुए नाम स्थान कक्षा ;

int यहाँ मुख्य ( ) {
चार एक्स = 'डी' ;

तैरना फ्लोट_वर ;

फ्लोट_वर = तैरना ( एक्स ) / 'सी' ;
// स्पष्ट रूप से एक इंट को एक फ्लोट में परिवर्तित करना।

अदालत << 'फ़्लोट_वर का मान है:' << फ्लोट_वर << अंतः ;

वापस करना 0 ;
}

इनपुट मान वर्ण D के रूप में होता है जिसे फ़्लोट डेटा प्रकार में संग्रहीत किया जाता है और आगे वर्ण C द्वारा विभाजित किया जाता है। इन वर्णों को संख्यात्मक मानों में बदल दिया जाता है और उन पर एक विभाजन ऑपरेशन किया जाता है, जिससे मान फ़्लोट में वापस आ जाता है।

स्पष्ट प्रकार का रूपांतरण

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

  • असाइनमेंट ऑपरेटर का उपयोग करके रूपांतरण
  • कास्ट ऑपरेटर का उपयोग करके रूपांतरण

C++ में असाइनमेंट ऑपरेटर का उपयोग करके रूपांतरण टाइप करें

असाइनमेंट ऑपरेटर का उपयोग करके टाइप रूपांतरण जबरदस्ती किया जाता है, अर्थात एक डेटा प्रकार को दूसरे में मैन्युअल रूप से परिवर्तित किया जाता है। यह असाइनमेंट ऑपरेटर '=' का उपयोग करके पूरा किया जाता है, जो दाएं हाथ के ऑपरेंड के मान को उसके बाईं ओर के वेरिएबल को निर्दिष्ट करता है।

उदाहरण
यह प्रोग्राम टाइप कास्टिंग का उपयोग करके वृत्त के क्षेत्रफल की गणना करता है।

#शामिल करें
#शामिल करें <सीमैथ>
का उपयोग करते हुए नाम स्थान कक्षा ;
int यहाँ मुख्य ( )
{
int यहाँ RADIUS ;
अदालत <> RADIUS ;
तैरना क्षेत्र = एम_पीआई * RADIUS * RADIUS ;
अदालत << 'वृत्त का क्षेत्रफल त्रिज्या सहित' << RADIUS << ' = ' << क्षेत्र ;
}

असाइनमेंट ऑपरेटर का उपयोग क्षेत्र में फ्लोट मान निर्दिष्ट करने के लिए किया जाता है, जिसमें पूर्णांक डेटा प्रकार में त्रिज्या का मान शामिल होता है।

वृत्त का क्षेत्रफल फ़्लोट डेटा प्रकार में लौटाया जाता है, जबकि त्रिज्या पूर्णांक डेटा प्रकार में इनपुट किया जाता है। इस प्रकार, असाइनमेंट ऑपरेटर का उपयोग करके टाइप कास्टिंग के माध्यम से वेरिएबल का डेटा प्रकार बदल दिया जाता है।

C++ में कास्ट ऑपरेटर का उपयोग करके रूपांतरण टाइप करें

टाइप रूपांतरण एक कास्ट ऑपरेटर का उपयोग करके किया जाता है, जो प्रोग्राम की जरूरतों के अनुसार एक डेटा प्रकार को दूसरे प्रकार में बदलने के लिए मजबूर करता है।

चार अलग-अलग कास्ट ऑपरेटर हैं:

  • स्टेटिक_कास्ट
  • const_cast
  • गतिशील_कास्ट
  • पुनर्व्याख्या_कास्ट

1: स्टेटिक_कास्ट

स्टेटिक_कास्ट एक कास्टिंग ऑपरेटर है जिसका उपयोग फ़्लोट और वर्णों को स्पष्ट रूप से पूर्णांक इत्यादि में परिवर्तित करने के लिए किया जाता है। यह सबसे बुनियादी कास्ट ऑपरेटर है. यह उन डेटा प्रकारों को कास्ट कर सकता है जो प्रकृति में समान हैं। यह पॉइंटर्स को एक रूप से दूसरे रूप में परिवर्तित कर सकता है, इसलिए इसका उपयोग मेमोरी प्रबंधन के लिए भी किया जा सकता है।

वाक्य - विन्यास

स्टेटिक_कास्ट ( अभिव्यक्ति )

उदाहरण
यह प्रोग्राम static_cast का उपयोग करके एक डबल वेरिएबल को एक इंट डेटा प्रकार में परिवर्तित करने के लिए बनाया गया है। यह आउटपुट में किसी भी दशमलव भाग को काट देगा।

#शामिल करें
का उपयोग करते हुए नाम स्थान कक्षा ;
int यहाँ मुख्य ( )
{
// एक वेरिएबल घोषित करें
दोहरा पी ;
पी = 2,905 * 1,235 * 24,675 ;
तैरना परिणाम ;

अदालत << 'स्थैतिक कास्ट का उपयोग करने से पहले:' << अंतः ;
अदालत << 'पी का मान =' << पी << अंतः ;

// डेटा प्रकार को परिवर्तित करने के लिए static_cast का उपयोग करें
परिणाम = स्टेटिक_कास्ट ( पी ) ;
अदालत << 'स्थैतिक कास्ट का उपयोग करने के बाद:' << अंतः ;
अदालत << ' परिणाम का मूल्य = ' << परिणाम << अंतः ;

वापस करना 0 ;
}

प्रारंभ में, एक डबल वैरिएबल पी को उन मानों से लोड किया जाता है जिन्हें एक दूसरे से गुणा किया जाता है और परिणाम में संग्रहीत किया जाता है। परिणाम में static_cast ऑपरेटर से पहले और उसके बाद का परिणाम शामिल है:

static_cast ऑपरेटर का उपयोग करने से पहले, परिणाम दशमलव बिंदुओं में प्रदर्शित होता है, जबकि इस ऑपरेटर का उपयोग करने के बाद यह पूर्णांक डेटा प्रकार में प्रदर्शित होता है।

2: स्थिरांक_कास्ट

किसी ऑब्जेक्ट के स्थिर मान को गैर-स्थिर प्रकार में बदलने के लिए const_cast ऑपरेटर का उपयोग किया जाता है। इसका उपयोग वहां किया जाता है जहां एक स्थिर वस्तु घोषित की जाती है, और हमें कभी-कभी इसका मूल्य बदलने की आवश्यकता होती है।

वाक्य - विन्यास

const_cast ( अभिव्यक्ति )

उदाहरण
इस उदाहरण में, const_cast ऑपरेटर का उपयोग स्थिर क्वालीफायर को अस्थायी रूप से हटाने के लिए किया जाता है और आवश्यकता के अनुसार चर में परिवर्तन करने की अनुमति देता है:

#शामिल करें
का उपयोग करते हुए नाम स्थान कक्षा ;
int यहाँ मुख्य ( ) {
कॉन्स्ट int यहाँ एक्स = 70 ;
कॉन्स्ट int यहाँ * और = & एक्स ;
अदालत << 'पुराना मान है' << * और << ' \एन ' ;
int यहाँ * साथ = const_cast ( और ) ;
* साथ = 90 ;
अदालत << 'नया मान है' << * और ;
वापस करना 0 ;
}

स्थिरांक क्वालीफायर को एक int वेरिएबल x को सौंपा गया है जिसका अर्थ है कि इस वेरिएबल को सीधे संशोधित नहीं किया जा सकता है। उसके बाद int *y जो एक पॉइंटर है उसका उपयोग x तक पहुंचने के लिए किया जाता है, लेकिन फिर भी इसे बदला नहीं जा सकता है, और इसका मूल मान cout का उपयोग करके प्रदर्शित किया जाता है। const_cast ऑपरेटर का उपयोग करके, एक पॉइंटर z बनाया जाता है जो गैर-स्थिर होता है, इसका उपयोग x के मान तक पहुंचने के लिए किया जाता है ताकि इसे संपादन योग्य बनाया जा सके। यह z को निर्दिष्ट मान को 90 के साथ बदल देता है जो अप्रत्यक्ष रूप से x में मान को बदल देता है।

प्रारंभ में, स्थिर चर x का मान 70 है जिसे const_cast ऑपरेटर का उपयोग करके संशोधित किया गया है, जिससे यह 90 हो गया है।

3: डायनामिक_कास्ट

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

वाक्य - विन्यास

गतिशील_कास्ट ( अभिव्यक्ति )

उदाहरण
इस उदाहरण में, डायनामिक_कास्ट ऑपरेटर का उपयोग बहुरूपी वर्ग के प्रकार की जांच करने के लिए किया जाता है, और यह आधार और व्युत्पन्न वर्ग सदस्यों दोनों तक पहुंच की अनुमति देता है।

#शामिल
#शामिल <अपवाद>
का उपयोग करते हुए नाम स्थान कक्षा ;
कक्षा टीबेस
{
जनता :
तैरना आधार_जी = 9.81 ;

आभासी खालीपन डमी ( )
{

} ;
} ;

कक्षा टीव्युत्पन्न : जनता टीबेस
{
जनता :
int यहाँ स्थानीय_जी = 9.78 ;
} ;

int यहाँ मुख्य ( )
{

टीबेस * आधार = नया टीव्युत्पन्न ;
टीव्युत्पन्न * व्युत्पन्न ;

व्युत्पन्न = गतिशील_कास्ट ( आधार ) ;

अदालत < आधार_जी << अंतः ;
अदालत < स्थानीय_जी << अंतः ;

getchar ( ) ;
वापस करना 0 ;
}

दो वर्गों को आधार और व्युत्पन्न वर्गों के रूप में परिभाषित किया गया है। TBase* प्रकार का एक सूचक आधार बनाया जाता है और TDerived प्रकार के गतिशील रूप से आवंटित ऑब्जेक्ट को सौंपा जाता है। बहुरूपता के इस उदाहरण में एक व्युत्पन्न क्लास ऑब्जेक्ट को बेस क्लास पॉइंटर को सौंपा जा सकता है। डायनामिक_कास्ट जाँचता है कि क्या पॉइंटर TDerived के वैध ऑब्जेक्ट तक पहुँचता है, यदि कास्ट को एक सफल परिणाम मिलता है तो व्युत्पन्न वर्ग को एक वैध परिणाम मिलेगा अन्यथा यह एक शून्य मान लौटाएगा।

4: पुनर्व्याख्या_कास्ट

Reinterpret_cast एक डेटा प्रकार के पॉइंटर को एक अलग डेटा प्रकार के पॉइंटर में बदल देता है। यह जाँच नहीं करता है कि डेटा प्रकार के पॉइंटर्स समान हैं या नहीं। इस कास्टिंग ऑपरेटर को सावधानी से उपयोग और संभालना आवश्यक है।

उदाहरण
इस उदाहरण में, एक डेटा प्रकार के पॉइंटर को reinterpret_cast का उपयोग करके दूसरे डेटा प्रकार के पॉइंटर में दोबारा व्याख्या किया जाता है:

#शामिल करें
का उपयोग करते हुए नाम स्थान कक्षा ;

int यहाँ मुख्य ( )
{
int यहाँ * क्यू = नया int यहाँ ( 70 ) ;
चार * चौधरी = पुनर्व्याख्या_कास्ट ( क्यू ) ;
अदालत << * क्यू << अंतः ;
अदालत << * चौधरी << अंतः ;
अदालत << क्यू << अंतः ;
अदालत << चौधरी << अंतः ;
वापस करना 0 ;
}

प्रारंभ में, एक पूर्णांक को 70 मान के साथ निर्दिष्ट किया जाता है। सूचक q इस गतिशील रूप से आवंटित पूर्णांक को इंगित करता है। Reinterpret_cast का उपयोग सूचक q को एक वर्ण सूचक ch के रूप में पुन: व्याख्या करने के लिए किया जाता है, जिसका अर्थ है कि मूल रूप से q को सौंपी गई मेमोरी को अब ऐसे माना जाता है जैसे कि यह एक वर्ण है। Cout कमांड का उपयोग करके, यह q और ch को निर्दिष्ट मान प्रिंट करता है। चूँकि ch को एक वर्ण सूचक के रूप में माना जाता है, यह एक वर्ण मान लौटाएगा।

यह *ch का उपयोग करके ch की ओर इंगित मान को प्रिंट करता है। हालाँकि, चूंकि ch को एक कैरेक्टर पॉइंटर के रूप में माना जाता है, इसलिए यह लाइन मेमोरी को एक कैरेक्टर के रूप में व्याख्या करेगी। यह ch का उपयोग करके पॉइंटर ch में संग्रहीत मेमोरी एड्रेस को प्रिंट करता है। यह q जैसा ही मेमोरी एड्रेस है क्योंकि यह उसी मेमोरी की पुनर्व्याख्या मात्र है।

प्रारंभ में, पूर्णांक 70 संग्रहीत करता है। बाद में, इसे सूचक q और सूचक ch के बीच हेरफेर किया जाता है। आउटपुट 2 और 4 समान हैं क्योंकि दूसरे मान को reinterpret_cast का उपयोग करके पुनः व्याख्या किया गया है।

टिप्पणी : यह सुझाव दिया जाता है कि इस कास्ट ऑपरेटर का उपयोग तब तक न करें जब तक कि इसकी बहुत आवश्यकता न हो क्योंकि यह ऑब्जेक्ट को एक गैर-पोर्टेबल उत्पाद बना देता है

निष्कर्ष

एक वेरिएबल के डेटा प्रकार को दूसरे में बदलने की प्रक्रिया को C++ में टाइप रूपांतरण या टाइप कास्टिंग के रूप में जाना जाता है। यह विभिन्न डेटा प्रकारों के चरों पर उनके डेटा प्रकारों को एक दूसरे के साथ संगत बनाकर गणितीय संचालन करने के लिए किया जाता है। प्रकार रूपांतरण कोड को अनुकूलित करता है। C++ में अंतर्निहित और स्पष्ट प्रकार के रूपांतरण हैं। अंतर्निहित प्रकार का रूपांतरण नियमों के पूर्वनिर्धारित सेट का उपयोग करके कंपाइलर द्वारा ही किया जाता है, जबकि स्पष्ट प्रकार का रूपांतरण प्रोग्रामर द्वारा असाइनमेंट ऑपरेटरों और कास्ट ऑपरेटरों का उपयोग करके किया जाता है।