ڈیٹا کی اقسام کو C++ میں کیسے تبدیل کریں۔

Y A Ky Aqsam Kw C My Kys Tbdyl Kry



ایک متغیر کے ڈیٹا کی قسم کو دوسرے میں تبدیل کرنے کے عمل کو C++ میں ٹائپ کنورژن یا ٹائپ کاسٹنگ کہا جاتا ہے۔ یہ مختلف ڈیٹا کی اقسام کے متغیرات پر ان کے ڈیٹا کی اقسام کو ایک دوسرے کے ساتھ ہم آہنگ بنا کر ریاضیاتی کارروائیوں کو انجام دینے کے لیے کیا جاتا ہے۔ قسم کی تبدیلی کوڈ کو بہتر بناتی ہے۔ مثال کے طور پر، دو متغیرات کے درمیان فرق کا حساب لگاتے وقت، اگر ایک عدد فلوٹ ٹائپ میں ہے اور دوسرا انٹیجر ڈیٹا ٹائپ میں، تو انٹیجر ڈیٹا ٹائپ کو فلوٹ ٹائپ میں تبدیل کر دیا جائے گا

ڈیٹا کی اقسام کو C++ میں کیسے تبدیل کریں۔

C++ میں، ڈیٹا کی اقسام کو تبدیل کرنے کے دو طریقے ہیں:

مضمر قسم کی تبدیلی

C++ کوڈ کمپائلر کے پہلے سے طے شدہ اصولوں کے مطابق، مضمر قسم کی تبدیلی وہ قسم کی تبدیلی ہے جو کمپائلر کے ذریعے صارف کی طرف سے کسی بیرونی محرک کی ضرورت کے بغیر خود بخود کی جاتی ہے۔ اس قسم کی تبدیلی عام طور پر کسی پروگرام میں اس وقت ہوتی ہے جب ایک سے زیادہ ڈیٹا کی قسم ہوتی ہے، اور اظہار کی ڈیٹا کی قسم اس اظہار میں شامل متغیر کے ڈیٹا کی قسم سے میل نہیں کھاتی ہے۔







تبادلوں کے دوران ڈیٹا کے نقصان سے بچنے کے لیے، مرتب کرنے والا ڈیفالٹ سے کم درست ڈیٹا کی قسم کو زیادہ درستگی والے ڈیٹا کی قسم کے ساتھ تبدیل کرتا ہے۔ مثال کے طور پر، یہ ڈیٹا کے نقصان کو روکنے کے لیے فلوٹ کو انٹیجر میں تبدیل کرنے کے بجائے ایک انٹیجر کو فلوٹ میں بدل دے گا۔ اسے پروموشن کہتے ہیں۔ مندرجہ ذیل ڈیٹا کی مختلف اقسام کے لیے ترجیحی خاکہ ہے۔





قسم کی تبدیلی کا آرڈر

قسم کی تبدیلی کے لیے صحیح ترتیب اس طرح دی گئی ہے:





bool -- > چار -- > مختصر int -- > int -- > غیر دستخط شدہ انٹ -- > طویل -- > غیر دستخط شدہ طویل -- > لمبی لمبی -- > تیرنا -- > دگنا -- > طویل ڈبل

کم صحت سے متعلق قسم کے متغیر کو ڈیٹا کے نقصان کو روکنے کے لیے اعلیٰ درستگی والے ڈیٹا کی قسم میں تبدیل کیا جاتا ہے۔

مثال 1

اس مثال میں، اضافہ مختلف ڈیٹا کی اقسام کے متغیر پر مضمر قسم کی تبدیلی کا استعمال کرتے ہوئے کیا جاتا ہے۔



# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;

int مرکزی ( ) {
int نمبر = 100 ;
چار کردار = 'سی' ;
cout << '100 + 'C' =' << نمبر + کردار << endl ;

تیرنا val = نمبر + 'c' ;
cout << 'فلوٹ ویل(100 + 'c') = ' << val << endl ;

int تھا = 7890 ;
طویل نہیں تھا = تھا ;
cout << 'var_int =' << نہیں تھا ;
واپسی 0 ;
}

یہاں ASCII ٹیبل سے ایک عدد اور ایک کریکٹر، اور ایک فلوٹ نمبر اور کریکٹر 'c' شامل کیا گیا ہے۔ انٹیجر کو تیسرے حصے میں ایک لمبی ڈیٹا کی قسم کے طور پر رکھا جاتا ہے اور ڈیٹا کی اقسام کو مرتب کرنے والا خود اس کے پہلے سے طے شدہ اصولوں کی بنیاد پر تبدیل کرتا ہے۔

100 اور 'C' کا مجموعہ 167 لوٹاتا ہے کیونکہ 'C' نمبروں میں 67 کے برابر ہوتا ہے اور 100+'c' 199 دیتا ہے کیونکہ چھوٹے 'c' 99 کے برابر ہوتا ہے۔ int متغیر ایک طویل ڈیٹا کی قسم میں محفوظ ہوتا ہے۔

مثال 2

اس مثال میں، ڈیویژن آپریشن کرنے کے لیے کریکٹر D کو فلوٹ میں تبدیل کیا جاتا ہے۔

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;

int مرکزی ( ) {
چار ایکس = 'ڈی' ;

تیرنا float_var ;

float_var = تیرنا ( ایکس ) / 'c' ;
// واضح طور پر ایک int کو فلوٹ میں تبدیل کرنا۔

cout << 'float_var کی قدر ہے:' << float_var << endl ;

واپسی 0 ;
}

ان پٹ ویلیو کریکٹر D کی شکل میں ہے جو فلوٹ ڈیٹا ٹائپ میں محفوظ ہے اور مزید کریکٹر C کے ذریعے تقسیم کیا جاتا ہے۔ یہ حروف عددی قدروں میں تبدیل ہو جاتے ہیں اور ان پر ایک ڈویژن آپریشن کیا جاتا ہے، جس سے فلوٹ میں قدر واپس آتی ہے۔

واضح قسم کی تبدیلی

صارف کو C++ کی واضح قسم کی تبدیلی کے ساتھ ڈیٹا کی قسم کو دستی طور پر تبدیل کرنا چاہیے، جسے اکثر قسم کاسٹنگ کہا جاتا ہے۔ اس قسم کا معدنیات سے متعلق قسم کی تبدیلی سے بچنے کے لیے کیا جاتا ہے۔ C++ میں Explicit Type Casting کو انجام دینے کے دو طریقے ہیں:

  • اسائنمنٹ آپریٹر کا استعمال کرتے ہوئے تبدیلی
  • کاسٹ آپریٹر کا استعمال کرتے ہوئے تبدیلی

C++ میں اسائنمنٹ آپریٹر کا استعمال کرتے ہوئے کنورژن ٹائپ کریں۔

اسائنمنٹ آپریٹر کا استعمال کرتے ہوئے قسم کی تبدیلی زبردستی کی جاتی ہے، یعنی ایک ڈیٹا کی قسم کو دستی طور پر دوسری میں تبدیل کیا جاتا ہے۔ یہ اسائنمنٹ آپریٹر '=' کا استعمال کرتے ہوئے مکمل کیا جاتا ہے، جو دائیں ہاتھ کے آپرینڈ کی قدر اس کے بائیں جانب متغیر کو تفویض کرتا ہے۔

مثال
یہ پروگرام قسم کاسٹنگ کا استعمال کرتے ہوئے دائرے کے رقبے کا حساب لگاتا ہے۔

# شامل کریں
#include
استعمال کرتے ہوئے نام کی جگہ std ;
int مرکزی ( )
{
int رداس ;
cout <> رداس ;
تیرنا رقبہ = M_PI * رداس * رداس ;
cout << 'رداس کے ساتھ دائرے کا رقبہ' << رداس << '=' << رقبہ ;
}

اسائنمنٹ آپریٹر کا استعمال علاقے کو فلوٹ ویلیو تفویض کرنے کے لیے کیا جاتا ہے، جو کہ عددی ڈیٹا کی قسم میں رداس کی قدر پر مشتمل ہوتا ہے۔

دائرے کا رقبہ فلوٹ ڈیٹا کی قسم میں لوٹایا جاتا ہے، جبکہ رداس عددی ڈیٹا ٹائپ میں ان پٹ ہوتا ہے۔ اس طرح، متغیر کے ڈیٹا کی قسم کو اسائنمنٹ آپریٹر کا استعمال کرتے ہوئے ٹائپ کاسٹنگ کے ذریعے تبدیل کیا جاتا ہے۔

C++ میں کاسٹ آپریٹر کا استعمال کرتے ہوئے کنورژن ٹائپ کریں۔

قسم کی تبدیلی کاسٹ آپریٹر کا استعمال کرتے ہوئے کی جاتی ہے، جو پروگرام کی ضروریات کے مطابق ایک ڈیٹا کی قسم کو دوسری قسم میں تبدیل کرنے پر مجبور کرتا ہے۔

چار مختلف کاسٹ آپریٹرز ہیں:

  • static_cast
  • const_cast
  • متحرک_کاسٹ
  • reinterpret_cast

1: جامد_کاسٹ

static_cast کاسٹنگ آپریٹر ہے جو واضح طور پر فلوٹس اور کریکٹرز کو انٹیجرز وغیرہ میں تبدیل کرنے کے لیے استعمال ہوتا ہے۔ یہ سب سے بنیادی کاسٹ آپریٹر ہے۔ یہ ڈیٹا کی قسمیں ڈال سکتا ہے جو فطرت میں ملتے جلتے ہیں۔ یہ پوائنٹرز کو ایک شکل سے دوسری شکل میں تبدیل کر سکتا ہے، لہذا اسے میموری کے انتظام کے لیے بھی استعمال کیا جا سکتا ہے۔

نحو

static_cast ( اظہار )

مثال
یہ پروگرام static_cast کا استعمال کرتے ہوئے ایک ڈبل متغیر کو int ڈیٹا ٹائپ میں تبدیل کرنے کے لیے بنایا گیا ہے۔ یہ آؤٹ پٹ میں کسی بھی اعشاریہ حصے کو کاٹ دے گا۔

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
int مرکزی ( )
{
// متغیر کا اعلان کریں۔
دگنا ص ;
ص = 2,905 * 1,235 * 24,675 ;
تیرنا نتیجہ ;

cout << 'جامد کاسٹ استعمال کرنے سے پہلے:' << endl ;
cout << 'p کی قدر =' << ص << endl ;

// ڈیٹا کی قسم کو تبدیل کرنے کے لیے static_cast کا استعمال کریں۔
نتیجہ = static_cast ( ص ) ;
cout << 'جامد کاسٹ استعمال کرنے کے بعد:' << endl ;
cout << 'نتائج کی قدر =' << نتیجہ << endl ;

واپسی 0 ;
}

ابتدائی طور پر، ایک ڈبل متغیر p اقدار کے ساتھ بھری ہوئی ہے جو ایک دوسرے سے ضرب کی جاتی ہیں اور نتیجہ میں محفوظ ہوتی ہیں۔ نتیجہ static_cast آپریٹر سے پہلے اور اس کی پیروی کرنے والے نتیجہ پر مشتمل ہے:

static_cast آپریٹر استعمال کرنے سے پہلے، نتیجہ اعشاریہ پوائنٹس میں ظاہر ہوتا ہے، جب کہ اس آپریٹر کو استعمال کرنے کے بعد یہ عدد ڈیٹا کی قسم میں ظاہر ہوتا ہے۔

2: const_cast

const_cast آپریٹر کسی چیز کی مستقل قدر کو غیر مستقل قسم میں تبدیل کرنے کے لیے استعمال ہوتا ہے۔ یہ استعمال کیا جاتا ہے جہاں ایک مستقل چیز کا اعلان کیا جاتا ہے، اور ہمیں کبھی کبھار اس کی قدر کو تبدیل کرنے کی ضرورت ہوتی ہے۔

نحو

const_cast ( اظہار )

مثال
اس مثال میں، const_cast آپریٹر کو مستقل کوالیفائر کو عارضی طور پر ہٹانے کے لیے استعمال کیا جاتا ہے اور ضرورت کے مطابق متغیر میں تبدیلیاں کرنے کی اجازت دیتا ہے:

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
int مرکزی ( ) {
const int ایکس = 70 ;
const int * اور = اور ایکس ;
cout << 'پرانی قیمت ہے' << * اور << ' \n ' ;
int * کے ساتھ = const_cast ( اور ) ;
* کے ساتھ = 90 ;
cout << 'نئی قدر ہے' << * اور ;
واپسی 0 ;
}

مستقل کوالیفائر ایک int متغیر x کو تفویض کیا گیا ہے جس کا مطلب ہے کہ اس متغیر میں براہ راست ترمیم نہیں کی جاسکتی ہے۔ اس کے بعد int *y جو کہ ایک پوائنٹر ہے x تک رسائی کے لیے استعمال کیا جاتا ہے، لیکن پھر بھی اسے تبدیل نہیں کیا جا سکتا، اور اس کی اصل قیمت cout کے ذریعے ظاہر کی جاتی ہے۔ const_cast آپریٹر کا استعمال کرتے ہوئے، ایک پوائنٹر z بنایا جاتا ہے جو کہ غیر مستقل ہے، اسے x کی قدر تک رسائی کے لیے استعمال کیا جاتا ہے تاکہ اسے قابل تدوین بنایا جا سکے۔ یہ 90 کے ساتھ z کو تفویض کردہ قدر کو تبدیل کرتا ہے جو بالواسطہ طور پر x میں قدر کو تبدیل کرتا ہے۔

ابتدائی طور پر، مستقل متغیر x کی قدر 70 ہے جسے const_cast آپریٹر کے ذریعے تبدیل کرکے اسے 90 بنا دیا جاتا ہے۔

3: متحرک_کاسٹ

وراثت کے درجہ بندی کے ساتھ، جسے ٹائپ سیف ڈاؤن کاسٹ بھی کہا جاتا ہے۔ ڈاون کاسٹنگ ایک حوالہ یا پوائنٹر کو بیس کلاس ریفرنس یا پوائنٹر سے اخذ شدہ کلاس میں تبدیل کرنے کا عمل ہے۔

نحو

متحرک_کاسٹ ( اظہار )

مثال
اس مثال میں، ڈائنامک_کاسٹ آپریٹر پولیمورفک کلاس کی قسم کو چیک کرنے کے لیے استعمال کیا جاتا ہے، اور یہ بیس اور اخذ شدہ کلاس ممبران دونوں تک رسائی کی اجازت دیتا ہے۔

# شامل کریں
#include
استعمال کرتے ہوئے نام کی جگہ std ;
کلاس ٹی بیس
{
عوام :
تیرنا base_g = 9.81 ;

مجازی باطل ڈمی ( )
{

} ;
} ;

کلاس ٹی ڈی سے حاصل کیا گیا۔ : عوام ٹی بیس
{
عوام :
int local_g = 9.78 ;
} ;

int مرکزی ( )
{

ٹی بیس * بنیاد = نئی ٹی ڈی سے حاصل کیا گیا۔ ;
ٹی ڈی سے حاصل کیا گیا۔ * ماخوذ ;

ماخوذ = متحرک_کاسٹ ( بنیاد ) ;

cout < base_g << endl ;
cout < local_g << endl ;

getchar ( ) ;
واپسی 0 ;
}

دو کلاسوں کو بیس اور اخذ شدہ کلاسز کے طور پر بیان کیا گیا ہے۔ ٹائپ TBase* کا ایک پوائنٹر بیس بنایا جاتا ہے اور TDerived قسم کے متحرک طور پر مختص آبجیکٹ کو تفویض کیا جاتا ہے۔ پولیمورفزم کی اس مثال میں ماخوذ کلاس آبجیکٹ کو بیس کلاس پوائنٹر کو تفویض کیا جاسکتا ہے۔ dynamic_cast چیک کرتا ہے کہ آیا پوائنٹر TDerived کی درست آبجیکٹ تک رسائی حاصل کرتا ہے، اگر کاسٹ کو کامیاب نتیجہ ملتا ہے تو اخذ شدہ کلاس کو ایک درست نتیجہ ملے گا بصورت دیگر یہ ایک null قدر لوٹائے گا۔

4: reinterpret_cast

reinterpret_cast ایک ڈیٹا ٹائپ کے پوائنٹر کو مختلف ڈیٹا ٹائپ کے پوائنٹر میں تبدیل کرتا ہے۔ یہ چیک نہیں کرتا کہ آیا پوائنٹرز کی ڈیٹا کی قسمیں ایک جیسی ہیں یا نہیں۔ اس کاسٹنگ آپریٹر کو احتیاط سے استعمال اور ہینڈل کرنے کی ضرورت ہے۔

مثال
اس مثال میں، ایک ڈیٹا کی قسم کے پوائنٹر کو reinterpret_cast کا استعمال کرتے ہوئے دوسرے ڈیٹا ٹائپ کے پوائنٹر میں دوبارہ تشریح کیا جاتا ہے:

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;

int مرکزی ( )
{
int * q = نئی int ( 70 ) ;
چار * چودھری = reinterpret_cast ( q ) ;
cout << * q << endl ;
cout << * چودھری << endl ;
cout << q << endl ;
cout << چودھری << endl ;
واپسی 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++ میں مضمر اور واضح قسم کے تبادلے ہیں۔ مضمر قسم کی تبدیلی کمپائلر کے ذریعہ پہلے سے طے شدہ قواعد کا استعمال کرتے ہوئے کی جاتی ہے، جبکہ واضح قسم کی تبدیلی پروگرامر کے ذریعہ اسائنمنٹ آپریٹرز اور کاسٹ آپریٹرز کا استعمال کرتے ہوئے کی جاتی ہے۔