কিভাবে C++ এ ডেটা টাইপ রূপান্তর করা যায়

Kibhabe C E Deta Ta Ipa Rupantara Kara Yaya



একটি ভেরিয়েবলের ডাটা টাইপকে অন্য ভেরিয়েবলে পরিবর্তন করার প্রক্রিয়াটিকে C++ এ টাইপ কনভার্সন বা টাইপ কাস্টিং বলা হয়। এটি বিভিন্ন ডেটা প্রকারের ভেরিয়েবলের উপর গাণিতিক ক্রিয়াকলাপ সম্পাদন করার জন্য করা হয়, তাদের ডেটা প্রকারগুলি একে অপরের সাথে সামঞ্জস্যপূর্ণ করে। টাইপ কনভার্সন কোডটিকে অপ্টিমাইজ করে। উদাহরণস্বরূপ, দুটি ভেরিয়েবলের মধ্যে পার্থক্য গণনা করার সময়, যদি একটি সংখ্যা ফ্লোট টাইপ এবং অন্যটি পূর্ণসংখ্যা ডেটা টাইপের হয়, তাহলে বিয়োগ করার জন্য পূর্ণসংখ্যা ডেটা টাইপটি ফ্লোট টাইপে রূপান্তরিত হবে।

কিভাবে C++ এ ডেটা টাইপ রূপান্তর করা যায়

C++ এ, ডেটা টাইপ পরিবর্তন করার দুটি উপায় রয়েছে:

অন্তর্নিহিত প্রকার রূপান্তর

C++ কোড কম্পাইলারের পূর্বনির্ধারিত নিয়ম অনুসারে, অন্তর্নিহিত টাইপ কনভার্সন হল কম্পাইলার দ্বারা স্বয়ংক্রিয়ভাবে ব্যবহারকারীর কোনো বাহ্যিক ট্রিগারের প্রয়োজন ছাড়াই টাইপ কনভার্সন। এই ধরনের রূপান্তর সাধারণত একটি প্রোগ্রামে সঞ্চালিত হয় যখন একাধিক ডেটা টাইপ থাকে এবং এক্সপ্রেশনের ডেটা টাইপ এই এক্সপ্রেশনের সাথে জড়িত ভেরিয়েবলের ডেটা টাইপের সাথে মেলে না।







রূপান্তরের সময় ডেটা ক্ষতি এড়াতে, কম্পাইলার ডিফল্টভাবে কম সুনির্দিষ্ট ডেটা টাইপকে উচ্চ নির্ভুলতার ডেটা টাইপের সাথে পরিবর্তন করে। উদাহরণস্বরূপ, এটি ডেটা ক্ষতি রোধ করতে ফ্লোটকে পূর্ণসংখ্যাতে পরিবর্তন করার পরিবর্তে একটি পূর্ণসংখ্যাকে একটি ফ্লোটে রূপান্তর করবে। একে বলে প্রমোশন। বিভিন্ন ডাটা টাইপের অগ্রাধিকার চিত্র নিচে দেওয়া হল।





প্রকার রূপান্তরের জন্য অর্ডার

টাইপ রূপান্তরের জন্য সঠিক ক্রম দেওয়া হল:





বুল -- > চর -- > সংক্ষিপ্ত int -- > int -- > স্বাক্ষরবিহীন int -- > দীর্ঘ -- > স্বাক্ষরবিহীন দীর্ঘ -- > দীর্ঘ দীর্ঘ -- > ভাসা -- > দ্বিগুণ -- > দীর্ঘ ডবল

কম নির্ভুলতা টাইপ ভেরিয়েবলকে উচ্চ নির্ভুলতা ডেটা টাইপে রূপান্তর করা হয় যাতে ডেটা ক্ষতি রোধ করা যায়।

উদাহরণ 1

এই উদাহরণে, অন্তর্নিহিত টাইপ রূপান্তর ব্যবহার করে বিভিন্ন ডেটা প্রকারের ভেরিয়েবলের উপর সংযোজন করা হয়।



# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;

int প্রধান ( ) {
int সংখ্যা = 100 ;
চর চরিত্র = 'গ' ;
cout << '100 + 'C' = ' << সংখ্যা + চরিত্র << endl ;

ভাসা ভাল = সংখ্যা + 'গ' ;
cout << 'ফ্লোট ভ্যাল(100 + 'c') = ' << ভাল << 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 = ভাসা ( এক্স ) / 'গ' ;
// স্পষ্টভাবে একটি int রূপান্তর একটি float.

cout << 'float_var এর মান হল: ' << float_var << endl ;

প্রত্যাবর্তন 0 ;
}

ইনপুট মান অক্ষর D আকারে থাকে যা ফ্লোট ডেটা টাইপে সংরক্ষণ করা হয় এবং অক্ষর C দ্বারা আরও ভাগ করা হয়। এই অক্ষরগুলি সংখ্যাসূচক মানগুলিতে পরিবর্তিত হয় এবং তাদের উপর একটি বিভাগ অপারেশন করা হয়, ফ্লোটে মান ফিরিয়ে দেয়।

স্পষ্ট টাইপ রূপান্তর

ব্যবহারকারীকে অবশ্যই C++ এর সুস্পষ্ট টাইপ রূপান্তরের মাধ্যমে ডেটা টাইপ ম্যানুয়ালি পরিবর্তন করতে হবে, যা প্রায়ই টাইপ কাস্টিং নামে পরিচিত। অন্তর্নিহিত টাইপ রূপান্তর এড়াতে এই ধরনের কাস্টিং করা হয়। C++ এ স্পষ্ট টাইপ কাস্টিং চালানোর জন্য দুটি পদ্ধতি রয়েছে:

  • অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে রূপান্তর
  • কাস্ট অপারেটর ব্যবহার করে রূপান্তর

C++ এ অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে রূপান্তর টাইপ করুন

অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে টাইপ রূপান্তর জোরপূর্বক করা হয়, অর্থাৎ, একটি ডেটা টাইপ অন্যটিতে ম্যানুয়ালি রূপান্তরিত হয়। এটি অ্যাসাইনমেন্ট অপারেটর '=' ব্যবহার করে সম্পন্ন করা হয়, যা ডান-হাতের অপারেন্ডের মান তার বাম দিকের ভেরিয়েবলকে বরাদ্দ করে।

উদাহরণ
এই প্রোগ্রামটি টাইপ কাস্টিং ব্যবহার করে বৃত্তের ক্ষেত্রফল গণনা করে।

# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত
ব্যবহার নামস্থান std ;
int প্রধান ( )
{
int ব্যাসার্ধ ;
cout <> ব্যাসার্ধ ;
ভাসা এলাকা = M_PI * ব্যাসার্ধ * ব্যাসার্ধ ;
cout << 'ব্যাসার্ধ সহ বৃত্তের ক্ষেত্রফল' << ব্যাসার্ধ << '=' << এলাকা ;
}

অ্যাসাইনমেন্ট অপারেটরটি এলাকায় ফ্লোট মান নির্ধারণ করতে ব্যবহৃত হয়, যা পূর্ণসংখ্যা ডেটা টাইপের ব্যাসার্ধের মান নিয়ে গঠিত।

বৃত্তের ক্ষেত্রফল ফ্লোট ডেটা টাইপে দেওয়া হয়, যখন ব্যাসার্ধটি পূর্ণসংখ্যা ডেটাটাইপে ইনপুট হয়। সুতরাং, অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে টাইপ কাস্টিংয়ের মাধ্যমে ভেরিয়েবলের ডেটা টাইপ পরিবর্তন করা হয়।

C++ এ কাস্ট অপারেটর ব্যবহার করে রূপান্তর টাইপ করুন

টাইপ রূপান্তর একটি কাস্ট অপারেটর ব্যবহার করে করা হয়, যা প্রোগ্রামের প্রয়োজন অনুসারে একটি ডেটা টাইপকে অন্য টাইপে পরিবর্তন করতে বাধ্য করে।

চারটি ভিন্ন কাস্ট অপারেটর আছে:

  • স্ট্যাটিক_কাস্ট
  • const_cast
  • ডাইনামিক_কাস্ট
  • reinterpret_cast

1: স্ট্যাটিক_কাস্ট

স্ট্যাটিক_কাস্ট হল কাস্টিং অপারেটর যা স্পষ্টভাবে ফ্লোট এবং অক্ষরকে পূর্ণসংখ্যায় রূপান্তর করতে ব্যবহৃত হয়। এটি সবচেয়ে মৌলিক কাস্ট অপারেটর। এটি প্রকৃতির অনুরূপ ডেটা প্রকারগুলিকে কাস্ট করতে পারে। এটি পয়েন্টারকে এক ফর্ম থেকে অন্য ফর্মে রূপান্তর করতে পারে, তাই এটি মেমরি পরিচালনার জন্যও ব্যবহার করা যেতে পারে।

বাক্য গঠন

স্ট্যাটিক_কাস্ট ( অভিব্যক্তি )

উদাহরণ
এই প্রোগ্রামটি স্ট্যাটিক_কাস্ট ব্যবহার করে একটি ডাবল ভেরিয়েবলকে int ডেটা টাইপে রূপান্তর করার জন্য তৈরি করা হয়েছে। এটি আউটপুটের যেকোনো দশমিক অংশ কেটে ফেলবে।

# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;
int প্রধান ( )
{
// একটি পরিবর্তনশীল ঘোষণা করুন
দ্বিগুণ পি ;
পি = 2,905 * 1,235 * 24,675 ;
ভাসা ফলাফল ;

cout << 'স্ট্যাটিক কাস্ট ব্যবহার করার আগে:' << endl ;
cout << ' p এর মান = ' << পি << endl ;

// ডেটা টাইপ রূপান্তর করতে static_cast ব্যবহার করুন
ফলাফল = স্ট্যাটিক_কাস্ট ( পি ) ;
cout << 'স্ট্যাটিক কাস্ট ব্যবহার করার পরে:' << endl ;
cout << 'ফলাফলের মান =' << ফলাফল << endl ;

প্রত্যাবর্তন 0 ;
}

প্রাথমিকভাবে, একটি ডবল ভেরিয়েবল p মানগুলিকে লোড করা হয় যা একে অপরের দ্বারা গুণিত হয় এবং ফলাফলে সংরক্ষণ করা হয়। ফলাফলে স্ট্যাটিক_কাস্ট অপারেটরের আগে এবং অনুসরণ করার ফলাফল রয়েছে:

স্ট্যাটিক_কাস্ট অপারেটর ব্যবহার করার আগে, ফলাফলটি দশমিক পয়েন্টে প্রদর্শিত হয়, যখন এই অপারেটরটি ব্যবহার করার পরে এটি পূর্ণসংখ্যা ডেটা টাইপে প্রদর্শিত হয়।

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: গতিশীল_কাস্ট

উত্তরাধিকারের অনুক্রমের সাথে, যাকে টাইপ-সেফ ডাউনকাস্ট হিসাবেও উল্লেখ করা হয়। ডাউন কাস্টিং হল একটি রেফারেন্স বা পয়েন্টারকে একটি বেস ক্লাস রেফারেন্স বা পয়েন্টার থেকে প্রাপ্ত ক্লাসে রূপান্তর করার প্রক্রিয়া।

বাক্য গঠন

ডাইনামিক_কাস্ট ( অভিব্যক্তি )

উদাহরণ
এই উদাহরণে, ডায়নামিক_কাস্ট অপারেটরটি পলিমরফিক ক্লাসের ধরন পরীক্ষা করতে ব্যবহৃত হয় এবং এটি বেস এবং প্রাপ্ত উভয় শ্রেণীর সদস্যদের অ্যাক্সেসের অনুমতি দেয়।

#অন্তর্ভুক্ত করুন
#অন্তর্ভুক্ত <ব্যতিক্রম>
ব্যবহার নামস্থান std ;
ক্লাস টিবেস
{
পাবলিক :
ভাসা base_g = ৯.৮১ ;

অপার্থিব অকার্যকর ডামি ( )
{

} ;
} ;

ক্লাস TD প্রাপ্ত : পাবলিক টিবেস
{
পাবলিক :
int local_g = ৯.৭৮ ;
} ;

int প্রধান ( )
{

টিবেস * ভিত্তি = নতুন TD প্রাপ্ত ;
TD প্রাপ্ত * উদ্ভূত ;

উদ্ভূত = ডাইনামিক_কাস্ট ( ভিত্তি ) ;

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

getchar ( ) ;
প্রত্যাবর্তন 0 ;
}

দুটি শ্রেণী বেস এবং প্রাপ্ত ক্লাস হিসাবে সংজ্ঞায়িত করা হয়। TBase* টাইপের একটি পয়েন্টার বেস তৈরি করা হয় এবং TDerived টাইপের একটি গতিশীলভাবে বরাদ্দ করা বস্তুকে বরাদ্দ করা হয়। পলিমরফিজমের এই উদাহরণে একটি প্রাপ্ত বর্গ বস্তু একটি বেস ক্লাস পয়েন্টারে বরাদ্দ করা যেতে পারে। dynamic_cast চেক করে যে পয়েন্টারটি TDerived-এর বৈধ বস্তু অ্যাক্সেস করে কিনা, যদি কাস্ট একটি সফল ফলাফল পায় তাহলে প্রাপ্ত ক্লাস একটি বৈধ ফলাফল পাবে অন্যথায় এটি একটি শূন্য মান প্রদান করবে।

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++ এ অন্তর্নিহিত এবং সুস্পষ্ট ধরনের রূপান্তর রয়েছে। অন্তর্নিহিত টাইপ রূপান্তর কম্পাইলার নিজেই একটি পূর্বনির্ধারিত নিয়মের সেট ব্যবহার করে সঞ্চালিত হয়, যখন স্পষ্ট টাইপ রূপান্তর প্রোগ্রামার দ্বারা অ্যাসাইনমেন্ট অপারেটর এবং কাস্ট অপারেটর ব্যবহার করে সঞ্চালিত হয়।