இன மாற்றம் (Type Conversion)
ஒரு அடிப்படை இனத்திலிருந்து மற்றொரு இனத்திற்கு மாற்றப்படும் முறையே இனமாற்றம் எனப்படும். C++ இரண்டு வகையான இனமாற்றத்தை வழங்குகிறது.
(1) உள்ளுறை இனமாற்றம் மற்றும் (2) வெளியுறை இனமாற்றம்
(1) உள்ளுறை இனமாற்றம் (Implicit type conversion):
உள்ளுறை இனமாற்றம் என்பது தொகுப்பான் தானாகவே மாற்றத்தை ஏற்படுத்திக் கொள்வதாகும். இது தானியங்கி மாற்றம் (“Automatic conversion)” என்றும் அழைக்கப்படும்.
இந்த வகையாக இனமாற்றம் ஒரு கோவையில் வேறுபட்ட தரவினங்கள் கலந்திருக்கும் போது உபயோகிக்கப்படுகின்றன. செயலேற்பிகளின் வகை மாறுபடும் போது தொகுப்பானானது அவற்றில் ஒன்றை மற்றொன்றிக்கு இணையாகுமாறு மாற்றுகிறது. விதிமுறைகளின் படி சிறிய வகை பெரிய வகைக்கு மாற்றப்படுகிறது. இதுவே, இன உயர்வு “Type Promotion” எனப்படும்.
எடுத்துக்காட்டு:
#include <iostream>
using namespace std;
int main()
{
int a=6;
float b=3.14;
cout << a+b;
}
மேலே கொடுக்கப்பட்ட நிரலில் செயலேற்பி a என்பது, ஒரு முழு எண் வகை, b என்பது ஒரு மிதப்புப் புள்ளி வகை. நிரலின் இயக்கத்தின் போது முழு எண் மிதப்புப் புள்ளியாக மாற்றப்படுகிறது. ஏனெனில், மிதப்புப் புள்ளி, முழு எண்ணை விட பெரியவகையாகும். எனவே, மேலே கொடுக்கப்பட்ட நிரலின் விடையானது 9.14 - என்று கிடைக்கும்.
அட்டவணை 9.11 இனமாற்ற அமைப்பை காட்டுகிறது.
(RHO – Right Hand Operand; LHO – Left Hand Operand)
(2) வெளியுறை இனமாற்றம் (Explicit type conversion)
மாறிகள் அல்லது கோவைகளை ஒரு தரவினத்திலிருந்து மற்றொரு குறிப்பிட்ட தரவினத்திற்கு பயனரை மாற்றம் செய்ய அனுமதிப்பதே வெளியுறை இனமாற்றம் எனப்படும். இதுவே, இனவார்புரு "type casting” என்று அழைக்கப்படுகிறது.
கட்டளையமைப்பு:
(type-name) expression;
இங்கே, இனப்பெயர் என்பது மாற்றம் ஏற்படுத்துவதற்கான தகுதி வாய்ந்த C++ தரவினம் ஆகும்.
எடுத்துக்காட்டு
#include <iostream>
using namespace std;
int main( )
{
float varf=78.685;
cout << (int) varf;
}
மேலே கொடுக்கப்பட்டுள்ள நிரலில், varf என்ற மாறியானது 78.685 என்ற முதல் மதிப்போடு மிதப்புப் புள்ளி (float) தரவினமாக அறிவிக்கப்பட்டுள்ளது. வெளியீடு கூற்றில் varf ன் மதிப்பு முழு எண் தரவினமாக வெளியுறை இனமாற்றம் செய்யப்படுகிறது. இறுதி வெளியீடு 78 ஆகும்.
வெளியுறை இனமாற்றத்தின்போது, அதிக பரப்பு கொண்ட வகைக்கு மதிப்பை கொடுக்கும் போது அது எந்த சிக்கலையும் ஏற்படுத்தாது. ஆனால் பெரிய வகை மதிப்பை சிறிய வகையில் கொடுக்கும் போது சில துல்லியமான மதிப்புகளில் இழப்பு ஏற்படலாம்.
எடுத்துக்காட்டு:
#include <iostream>
using namespace std;
int main()
{
double varf=178.25255685;
cout << (float) varf << endl;
cout << (int) varf << endl;
}
வெளியீடு:
178.253
178