C++ இல் தரவு வகைகளை மாற்றுவது எப்படி

C Il Taravu Vakaikalai Marruvatu Eppati



ஒரு மாறியின் தரவு வகையை மற்றொன்றாக மாற்றும் செயல்முறையானது வகை மாற்றம் அல்லது C++ இல் வகை வார்ப்பு என அழைக்கப்படுகிறது. வெவ்வேறு தரவு வகைகளின் மாறிகள், அவற்றின் தரவு வகைகளை ஒன்றுக்கொன்று இணக்கமாகச் செய்வதன் மூலம் கணிதச் செயல்பாடுகளைச் செய்ய இது செய்யப்படுகிறது. வகை மாற்றம் குறியீட்டை மேம்படுத்துகிறது. எடுத்துக்காட்டாக, இரண்டு மாறிகளுக்கு இடையிலான வேறுபாட்டைக் கணக்கிடும் போது, ​​ஒரு எண் ஃப்ளோட் வகையிலும் மற்றொன்று முழு எண் தரவு வகையிலும் இருந்தால், கழித்தலை மேற்கொள்ள முழு எண் தரவு வகை ஃப்ளோட் வகையாக மாற்றப்படும்.

C++ இல் தரவு வகைகளை மாற்றுவது எப்படி

C++ இல், தரவு வகைகளை மாற்ற இரண்டு வழிகள் உள்ளன:

மறைமுக வகை மாற்றம்

C++ குறியீடு தொகுப்பியின் முன் வரையறுக்கப்பட்ட விதிகளின்படி, மறைமுக வகை மாற்றம் என்பது பயனரிடமிருந்து எந்த வெளிப்புற தூண்டுதலின் தேவையும் இல்லாமல் தானாகவே கம்பைலரால் மேற்கொள்ளப்படும் வகை மாற்றமாகும். இந்த வகையான மாற்றம் பொதுவாக ஒரு நிரலில் ஒன்றுக்கு மேற்பட்ட தரவு வகைகள் இருக்கும்போது நடைபெறும், மேலும் தரவு வகை வெளிப்பாடு இந்த வெளிப்பாட்டில் உள்ள மாறியின் தரவு வகையுடன் பொருந்தாது.







மாற்றத்தின் போது தரவு இழப்பைத் தவிர்க்க, கம்பைலர் இயல்பாகவே குறைந்த துல்லியமான தரவு வகையை அதிக துல்லியமான தரவு வகையுடன் மாற்றுகிறது. எடுத்துக்காட்டாக, தரவு இழப்பைத் தடுக்க ஃப்ளோட்டை முழு எண்ணாக மாற்றுவதை விட இது ஒரு முழு எண்ணை மிதவையாக மாற்றும். இது பதவி உயர்வு எனப்படும். வெவ்வேறு தரவு வகைகளுக்கான முன்னுரிமை வரைபடம் பின்வருமாறு.





வகை மாற்றத்திற்கான ஆர்டர்

வகை மாற்றத்திற்கான சரியான வரிசை பின்வருமாறு கொடுக்கப்பட்டுள்ளது:





பூல் -- > கரி -- > குறுகிய எண் -- > int -- > கையொப்பமிடாத முழு எண்ணாக -- > நீண்ட -- > கையொப்பமிடாத நீண்ட -- > நீண்ட நீண்ட -- > மிதவை -- > இரட்டை -- > நீண்ட இரட்டை

தரவு இழப்பைத் தடுக்க குறைந்த துல்லிய வகை மாறி உயர் துல்லிய தரவு வகையாக மாற்றப்படுகிறது.

எடுத்துக்காட்டு 1

இந்த எடுத்துக்காட்டில், மறைமுக வகை மாற்றத்தைப் பயன்படுத்தி வெவ்வேறு தரவு வகைகளின் மாறியில் கூட்டல் செய்யப்படுகிறது.



# அடங்கும்
பயன்படுத்தி பெயர்வெளி வகுப்பு ;

முழு எண்ணாக முக்கிய ( ) {
முழு எண்ணாக எண் = 100 ;
கரி பாத்திரம் = 'சி' ;
கூட் << '100 + 'சி' = ' << எண் + பாத்திரம் << endl ;

மிதவை மதிப்பு = எண் + 'c' ;
கூட் << 'ஃப்ளோட் வால்(100 + 'c') = ' << மதிப்பு << endl ;

முழு எண்ணாக இருந்தது = 7890 ;
நீளமானது இல்லை = இருந்தது ;
கூட் << 'var_int =' << இல்லை ;
திரும்ப 0 ;
}

இங்கே ASCII அட்டவணையில் இருந்து ஒரு முழு எண் மற்றும் ஒரு எழுத்து, மற்றும் ஒரு மிதவை எண் மற்றும் எழுத்து 'c' சேர்க்கப்பட்டுள்ளது. முழு எண் ஒரு நீண்ட தரவு வகையாக மூன்றாவது பிரிவில் வைக்கப்படுகிறது மற்றும் தரவு வகைகள் அதன் முன் வரையறுக்கப்பட்ட விதிகளின் அடிப்படையில் கம்பைலரால் மாற்றப்படுகின்றன.

100 மற்றும் ‘C’ ஆகியவற்றின் கூட்டுத்தொகை 167 ஐ வழங்குகிறது, ஏனெனில் ‘C’ எண்களில் 67 ஆகவும், 100+’c’ 199 ஐ வழங்குகிறது, சிறிய ‘c’ 99 ஆகவும் உள்ளது. int மாறி நீண்ட தரவு வகையில் சேமிக்கப்படுகிறது.

உதாரணம் 2

இந்த எடுத்துக்காட்டில், பிரிவு செயல்பாட்டைச் செய்ய D எழுத்து ஒரு மிதவையாக மாற்றப்படுகிறது.

# அடங்கும்
பயன்படுத்தி பெயர்வெளி வகுப்பு ;

முழு எண்ணாக முக்கிய ( ) {
கரி எக்ஸ் = 'டி' ;

மிதவை மிதவை_வார் ;

மிதவை_வார் = மிதவை ( எக்ஸ் ) / 'c' ;
// ஒரு முழு எண்ணை ஒரு மிதவைக்கு வெளிப்படையாக மாற்றுதல்.

கூட் << 'float_var இன் மதிப்பு:' << மிதவை_வார் << endl ;

திரும்ப 0 ;
}

உள்ளீட்டு மதிப்பு D என்ற எழுத்து வடிவில் உள்ளது, இது மிதவை தரவு வகையில் சேமிக்கப்பட்டு மேலும் C எழுத்துகளால் வகுக்கப்படுகிறது. இந்த எழுத்துகள் எண் மதிப்புகளாக மாற்றப்பட்டு, அவற்றின் மீது ஒரு பிரிவு செயல்பாடு செய்யப்படுகிறது, மதிப்பை மிதவையில் திரும்பப் பெறுகிறது.

வெளிப்படையான வகை மாற்றம்

பயனர் C++ இன் வெளிப்படையான வகை மாற்றத்துடன் தரவு வகையை கைமுறையாக மாற்ற வேண்டும், இது பெரும்பாலும் டைப் காஸ்டிங் என அழைக்கப்படுகிறது. மறைமுகமான வகை மாற்றத்தைத் தவிர்ப்பதற்காக இந்த வகை வார்ப்பு செய்யப்படுகிறது. C++ இல் வெளிப்படையான வகை வார்ப்புகளை மேற்கொள்ள இரண்டு முறைகள் உள்ளன:

  • அசைன்மென்ட் ஆபரேட்டரைப் பயன்படுத்தி மாற்றம்
  • காஸ்ட் ஆபரேட்டரைப் பயன்படுத்தி மாற்றம்

C++ இல் Assignment Operator ஐப் பயன்படுத்தி மாற்றத்தை உள்ளிடவும்

அசைன்மென்ட் ஆபரேட்டரைப் பயன்படுத்தி வகை மாற்றுதல் வலுக்கட்டாயமாக செய்யப்படுகிறது, அதாவது ஒரு தரவு வகை கைமுறையாக மாற்றப்படுகிறது. '=' என்ற அசைன்மென்ட் ஆபரேட்டரைப் பயன்படுத்துவதன் மூலம் இது நிறைவேற்றப்படுகிறது, இது வலது கை இயக்கத்தின் மதிப்பை அதன் இடது பக்கத்தில் உள்ள மாறிக்கு ஒதுக்குகிறது.

உதாரணமாக
இந்த நிரல் வகை வார்ப்புகளைப் பயன்படுத்தி வட்டத்தின் பரப்பளவைக் கணக்கிடுகிறது.

# அடங்கும்
# அடங்கும்
பயன்படுத்தி பெயர்வெளி வகுப்பு ;
முழு எண்ணாக முக்கிய ( )
{
முழு எண்ணாக ஆரம் ;
கூட் <> ஆரம் ;
மிதவை பகுதி = M_PI * ஆரம் * ஆரம் ;
கூட் << 'ஆரம் கொண்ட வட்டத்தின் பகுதி' << ஆரம் << ' = ' << பகுதி ;
}

முழு எண் தரவு வகையின் ஆரம் மதிப்பைக் கொண்டிருக்கும் பகுதிக்கு மிதவை மதிப்பை ஒதுக்க அசைன்மென்ட் ஆபரேட்டர் பயன்படுத்தப்படுகிறது.

வட்டத்தின் பரப்பளவு ஃப்ளோட் தரவு வகையிலும், ஆரம் முழு எண் தரவு வகையிலும் உள்ளீடு செய்யப்படும். இவ்வாறு, அசைன்மென்ட் ஆபரேட்டரைப் பயன்படுத்தி, டைப் காஸ்டிங் மூலம் மாறியின் தரவு வகை மாற்றப்படுகிறது.

C++ இல் Cast Operator ஐப் பயன்படுத்தி மாற்றத்தை உள்ளிடவும்

ஒரு வார்ப்பு ஆபரேட்டரைப் பயன்படுத்தி வகை மாற்றம் செய்யப்படுகிறது, இது நிரலின் தேவைகளுக்கு ஏற்ப ஒரு தரவு வகையை மற்றொரு வகையாக மாற்ற கட்டாயப்படுத்துகிறது.

நான்கு வெவ்வேறு காஸ்ட் ஆபரேட்டர்கள் உள்ளனர்:

  • நிலையான_வார்ப்பு
  • const_cast
  • டைனமிக்_காஸ்ட்
  • மறுவிளக்கம்_காஸ்ட்

1: நிலையான_காஸ்ட்

நிலையான_காஸ்ட் என்பது வார்ப்பு ஆபரேட்டராகும், இது மிதவைகள் மற்றும் எழுத்துக்களை முழு எண்களாக மாற்ற பயன்படுகிறது. இது மிகவும் அடிப்படையான நடிகர் ஆபரேட்டர். இது இயற்கையில் ஒத்த தரவு வகைகளை அனுப்ப முடியும். இது ஒரு படிவத்திலிருந்து மற்றொரு வடிவத்திற்கு சுட்டிகளை மாற்ற முடியும், எனவே இது நினைவக நிர்வாகத்திற்கும் பயன்படுத்தப்படலாம்.

தொடரியல்

நிலையான_வார்ப்பு ( வெளிப்பாடு )

உதாரணமாக
இந்த நிரல் ஒரு இரட்டை மாறியை static_cast ஐப் பயன்படுத்தி ஒரு int தரவு வகையாக மாற்ற கட்டமைக்கப்பட்டுள்ளது. இது வெளியீட்டில் எந்த தசம பகுதியையும் துண்டித்துவிடும்.

# அடங்கும்
பயன்படுத்தி பெயர்வெளி வகுப்பு ;
முழு எண்ணாக முக்கிய ( )
{
// ஒரு மாறியை அறிவிக்கவும்
இரட்டை ;
= 2,905 * 1,235 * 24,675 ;
மிதவை விளைவாக ;

கூட் << 'நிலையான நடிகர்களைப் பயன்படுத்துவதற்கு முன்:' << endl ;
கூட் << 'p இன் மதிப்பு =' << << endl ;

// தரவு வகையை மாற்ற static_cast ஐப் பயன்படுத்தவும்
விளைவாக = நிலையான_வார்ப்பு ( ) ;
கூட் << 'நிலையான நடிகர்களைப் பயன்படுத்திய பிறகு:' << endl ;
கூட் << 'முடிவின் மதிப்பு =' << விளைவாக << endl ;

திரும்ப 0 ;
}

தொடக்கத்தில், ஒரு இரட்டை மாறி p ஆனது, ஒன்றோடொன்று பெருக்கப்பட்டு, முடிவில் சேமிக்கப்படும் மதிப்புகளுடன் ஏற்றப்படுகிறது. முடிவு ஸ்டேடிக்_காஸ்ட் ஆபரேட்டருக்கு முன்னும் பின்னும் முடிவைக் கொண்டுள்ளது:

static_cast ஆபரேட்டரைப் பயன்படுத்துவதற்கு முன், முடிவு தசம புள்ளிகளில் காட்டப்படும், இந்த ஆபரேட்டரைப் பயன்படுத்திய பிறகு அது முழு எண் தரவு வகையில் காட்டப்படும்.

2: const_cast

ஒரு பொருளின் நிலையான மதிப்பை மாறாத வகைக்கு மாற்ற const_cast ஆபரேட்டர் பயன்படுத்தப்படுகிறது. ஒரு நிலையான பொருள் அறிவிக்கப்படும் இடத்தில் இது பயன்படுத்தப்படுகிறது, மேலும் அதன் மதிப்பை அவ்வப்போது மாற்ற வேண்டும்.

தொடரியல்

const_cast ( வெளிப்பாடு )

உதாரணமாக
இந்த எடுத்துக்காட்டில், நிலையான தகுதியை தற்காலிகமாக அகற்ற const_cast ஆபரேட்டர் பயன்படுத்தப்படுகிறது மற்றும் தேவைக்கேற்ப மாறியில் மாற்றங்களைச் செய்ய அனுமதிக்கிறது:

# அடங்கும்
பயன்படுத்தி பெயர்வெளி வகுப்பு ;
முழு எண்ணாக முக்கிய ( ) {
நிலையான முழு எண்ணாக எக்ஸ் = 70 ;
நிலையான முழு எண்ணாக * மற்றும் = & எக்ஸ் ;
கூட் << 'பழைய மதிப்பு' << * மற்றும் << ' \n ' ;
முழு எண்ணாக * உடன் = const_cast ( மற்றும் ) ;
* உடன் = 90 ;
கூட் << 'புதிய மதிப்பு' << * மற்றும் ;
திரும்ப 0 ;
}

நிலையான தகுதியானது ஒரு முழு எண்ணாக மாறி x க்கு ஒதுக்கப்பட்டுள்ளது, அதாவது இந்த மாறியை நேரடியாக மாற்ற முடியாது. அதன் பிறகு int *y இது x ஐ அணுகுவதற்குப் பயன்படுத்தப்படுகிறது, ஆனால் இன்னும் அதை மாற்ற முடியாது, மேலும் அதன் அசல் மதிப்பு cout ஐப் பயன்படுத்தி காட்டப்படும். கான்ஸ்ட்_காஸ்ட் ஆபரேட்டரைப் பயன்படுத்தி, ஒரு சுட்டி z உருவாக்கப்படுகிறது, அது நிலையானது அல்ல, இது x இன் மதிப்பை அணுகப் பயன்படுகிறது, அதைத் திருத்தும்படி செய்கிறது. இது z க்கு ஒதுக்கப்பட்ட மதிப்பை 90 உடன் மாற்றுகிறது, இது x இல் உள்ள மதிப்பை மறைமுகமாக மாற்றுகிறது.

ஆரம்பத்தில், மாறிலி x இன் மதிப்பு 70 ஆகும், இது const_cast ஆபரேட்டரைப் பயன்படுத்தி மாற்றியமைக்கப்பட்டு, அதை 90 ஆக்குகிறது.

3: டைனமிக்_காஸ்ட்

மரபுரிமையின் படிநிலையுடன், இது வகை-பாதுகாப்பான கீழ்நிலை என்றும் குறிப்பிடப்படுகிறது. டவுன் காஸ்டிங் என்பது ஒரு குறிப்பு அல்லது சுட்டியை அடிப்படை வகுப்பு குறிப்பு அல்லது சுட்டியிலிருந்து பெறப்பட்ட வகுப்பிற்கு மாற்றும் செயல்முறையாகும்.

தொடரியல்

டைனமிக்_காஸ்ட் ( வெளிப்பாடு )

உதாரணமாக
இந்த எடுத்துக்காட்டில், பாலிமார்பிக் வகுப்பின் வகையைச் சரிபார்க்க டைனமிக்_காஸ்ட் ஆபரேட்டர் பயன்படுத்தப்படுகிறது, மேலும் இது அடிப்படை மற்றும் பெறப்பட்ட வகுப்பு உறுப்பினர்களுக்கு அணுகலை அனுமதிக்கிறது.

# அடங்கும்
# அடங்கும் <விதிவிலக்கு>
பயன்படுத்தி பெயர்வெளி வகுப்பு ;
வர்க்கம் TBase
{
பொது :
மிதவை அடிப்படை_கிராம் = 9.81 ;

மெய்நிகர் வெற்றிடமானது போலி ( )
{

} ;
} ;

வர்க்கம் டி பெறப்பட்டது : பொது TBase
{
பொது :
முழு எண்ணாக உள்ளூர்_ஜி = 9.78 ;
} ;

முழு எண்ணாக முக்கிய ( )
{

TBase * அடித்தளம் = புதிய டி பெறப்பட்டது ;
டி பெறப்பட்டது * பெறப்பட்டது ;

பெறப்பட்டது = டைனமிக்_காஸ்ட் ( அடித்தளம் ) ;

கூட் < அடிப்படை_கிராம் << endl ;
கூட் < உள்ளூர்_ஜி << endl ;

பெறுதல் ( ) ;
திரும்ப 0 ;
}

இரண்டு வகுப்புகள் அடிப்படை மற்றும் பெறப்பட்ட வகுப்புகள் என வரையறுக்கப்படுகின்றன. TBase* வகையின் ஒரு சுட்டித் தளம் உருவாக்கப்பட்டு, TDerived வகையின் மாறும் ஒதுக்கப்பட்ட பொருளுக்கு ஒதுக்கப்படுகிறது. பாலிமார்பிஸத்தின் இந்த நிகழ்வில் ஒரு பெறப்பட்ட வகுப்புப் பொருளை அடிப்படை வகுப்பு சுட்டிக்கு ஒதுக்கலாம். TDerived இன் செல்லுபடியாகும் பொருளை சுட்டிக்காட்டி அணுகுகிறதா என்பதை dynamic_cast சரிபார்க்கிறது, நடிகர்கள் வெற்றிகரமான முடிவைப் பெற்றால், பெறப்பட்ட வகுப்பு சரியான முடிவைப் பெறும், இல்லையெனில் அது பூஜ்ய மதிப்பை வழங்கும்.

4: reinterpret_cast

reinterpret_cast ஆனது ஒரு தரவு வகையின் சுட்டியை வேறு தரவு வகையின் சுட்டியாக மாற்றுகிறது. சுட்டிகளின் தரவு வகைகள் ஒரே மாதிரியானதா இல்லையா என்பதை இது சரிபார்க்காது. இந்த காஸ்டிங் ஆபரேட்டரை கவனமாகப் பயன்படுத்த வேண்டும் மற்றும் கையாள வேண்டும்.

உதாரணமாக
இந்த விளக்கப்படத்தில், ஒரு தரவு வகையின் சுட்டியானது, reinterpret_cast ஐப் பயன்படுத்தி மற்றொரு தரவு வகையின் சுட்டியாக மறுவிளக்கம் செய்யப்படுகிறது:

# அடங்கும்
பயன்படுத்தி பெயர்வெளி வகுப்பு ;

முழு எண்ணாக முக்கிய ( )
{
முழு எண்ணாக * கே = புதிய முழு எண்ணாக ( 70 ) ;
கரி * ch = மறுவிளக்கம்_காஸ்ட் ( கே ) ;
கூட் << * கே << endl ;
கூட் << * ch << endl ;
கூட் << கே << endl ;
கூட் << ch << endl ;
திரும்ப 0 ;
}

ஆரம்பத்தில், ஒரு முழு எண் மதிப்பு 70 உடன் ஒதுக்கப்படுகிறது. சுட்டி q இந்த மாறும் ஒதுக்கப்பட்ட முழு எண்ணைக் குறிக்கிறது. reinterpret_cast ஆனது சுட்டி q ஐ ஒரு எழுத்து சுட்டி ch ஆக மறுவிளக்கம் செய்ய பயன்படுத்தப்படுகிறது, அதாவது முதலில் q க்கு ஒதுக்கப்பட்ட நினைவகம் இப்போது அது ஒரு எழுத்தாக கருதப்படுகிறது. cout கட்டளையைப் பயன்படுத்தி, இது q மற்றும் ch க்கு ஒதுக்கப்பட்ட மதிப்பை அச்சிடுகிறது. ch ஒரு எழுத்துக்குறி சுட்டியாகக் கருதப்படுவதால், அது எழுத்து மதிப்பை வழங்கும்.

இது *ch ஐப் பயன்படுத்தி ch க்கு சுட்டிக்காட்டப்பட்ட மதிப்பை அச்சிடுகிறது. இருப்பினும், ch ஒரு எழுத்துக்குறி சுட்டியாகக் கருதப்படுவதால், இந்த வரி நினைவகத்தை ஒரு எழுத்தாக விளக்குகிறது. இது ch ஐ பயன்படுத்தி சுட்டிக்காட்டி ch இல் சேமிக்கப்பட்ட நினைவக முகவரியை அச்சிடுகிறது. இது q இன் அதே நினைவக முகவரியாகும், ஏனெனில் இது அதே நினைவகத்தின் மறுவிளக்கம் மட்டுமே.

ஆரம்பத்தில், முழு எண் 70ஐ சேமிக்கிறது. பின்னர், இது சுட்டி q மற்றும் சுட்டிக்காட்டி ch இடையே கையாளப்படுகிறது. இரண்டாவது மதிப்பு reinterpret_cast ஐப் பயன்படுத்தி மறுவிளக்கம் செய்யப்படுவதால் வெளியீடுகள் 2 மற்றும் 4 ஒரே மாதிரியாக இருக்கும்.

குறிப்பு : இந்த காஸ்ட் ஆபரேட்டரைப் பயன்படுத்த வேண்டாம் என்று பரிந்துரைக்கப்படுகிறது, மேலும் இது பொருளை எடுத்துச் செல்ல முடியாத தயாரிப்பாக மாற்றுகிறது.

முடிவுரை

ஒரு மாறியின் தரவு வகையை மற்றொன்றாக மாற்றும் செயல்முறையானது வகை மாற்றம் அல்லது C++ இல் வகை வார்ப்பு என அழைக்கப்படுகிறது. வெவ்வேறு தரவு வகைகளின் மாறிகள், அவற்றின் தரவு வகைகளை ஒன்றுக்கொன்று இணக்கமாகச் செய்வதன் மூலம் கணிதச் செயல்பாடுகளைச் செய்ய இது செய்யப்படுகிறது. வகை மாற்றம் குறியீட்டை மேம்படுத்துகிறது. C++ இல் மறைமுகமான மற்றும் வெளிப்படையான வகை மாற்றங்கள் உள்ளன. மறைமுக வகை மாற்றமானது, முன்னரே வரையறுக்கப்பட்ட விதிகளின் தொகுப்பைப் பயன்படுத்தி கம்பைலரால் மேற்கொள்ளப்படுகிறது, அதே சமயம் வெளிப்படையான வகை மாற்றமானது புரோகிராமரால் அசைன்மென்ட் ஆபரேட்டர்கள் மற்றும் காஸ்ட் ஆபரேட்டர்களைப் பயன்படுத்தி மேற்கொள்ளப்படுகிறது.