কম্পিউটার

C++-এ const_cast - টাইপ কাস্টিং অপারেটর


দেওয়া টাস্ক হল c++ এ const_cast এর কাজ দেখানো।

const_cast হল এক প্রকার কাস্টিং অপারেটর। এটি যেকোনো বস্তুর ধ্রুবক মান পরিবর্তন করতে ব্যবহৃত হয় বা আমরা বলতে পারি যে এটি যেকোনো বস্তুর ধ্রুবক প্রকৃতি অপসারণ করতে ব্যবহৃত হয়।

const_cast এমন প্রোগ্রামগুলিতে ব্যবহার করা যেতে পারে যেখানে কিছু ধ্রুবক মান সহ যেকোন অবজেক্ট আছে যা মাঝে মাঝে পরিবর্তন করতে হবে।

সিনট্যাক্স

সিনট্যাক্স নিম্নরূপ -

const_cast<type name>(expression)

উদাহরণ

Input:
const int x = 50;
const int* y = &x;
cout<<"old value is"<<*y<<"\n";
int* z=const_cast<int *>(y);
*z=100;
cout<<"new value is"<<*y;
Output: old value is 50
new value is 100

নিম্নলিখিত উদাহরণটি const_cast এর মৌলিক ব্যবহার দেখায়। এখানে আমরা int-এর একটি ধ্রুবক ভেরিয়েবল "x" ঘোষণা করেছি যার একটি মান 50 নির্ধারণ করা হয়েছে এবং আরেকটি ধ্রুবক পয়েন্টার "y" টাইপ int যা "x" পরিবর্তনশীলকে নির্দেশ করে।

const_cast ব্যবহার করার জন্য একটি তৃতীয় পয়েন্টার তৈরি করতে হবে এবং এখানে আমরা একই ডেটা টাইপের পয়েন্টার “z” তৈরি করেছি, অর্থাৎ int।

তাই যখন আমরা আমাদের ধ্রুবক পয়েন্টার "y" পাস করি, যেটি ধ্রুবক ভেরিয়েবল "x" কে const_cast এ পয়েন্ট করে এবং পয়েন্টার z-এ একটি মান নির্ধারণ করি, আমরা আমাদের ধ্রুবক পয়েন্টার "y" এর মান পরিবর্তন করতে সক্ষম হই।

এইভাবে আমরা const_cast ব্যবহার করে ধ্রুবক মান 50 থেকে 100 এ পরিবর্তন করতে সক্ষম হয়েছি।

যদি আমরা "x" এর মান পরিবর্তন করার চেষ্টা করি যে পয়েন্টার "y" নির্দেশ করছে const_cast ব্যবহার না করে, তাহলে নিম্নলিখিত ত্রুটিটি দেখানো হবে-"অসাইনমেন্ট অফ রিড-ওনলি অবস্থান"

উদাহরণ

Input:
const int x = 50;
const int* y = &x;
cout<<"old value is"<<*y<<"\n";
int* z=const_cast<int *>(y);
*z=100;
cout<<"new value is"<<*y;
Output: old value is

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • প্রথমে int টাইপের একটি ধ্রুবক ভেরিয়েবল তৈরি করুন এবং এটিকে কিছু উপযুক্ত আকার দিন, ধরা যাক "a" এবং এর মান হবে 20।
  • তারপর একটি ধ্রুবক পয়েন্টার তৈরি করুন, আসুন আমরা একই ডেটা টাইপের "b" বলি এবং এটিকে আমাদের ধ্রুবক পরিবর্তনশীল "a" এর ঠিকানা বরাদ্দ করি।
  • তারপর একটি তৃতীয় পয়েন্টার তৈরি করুন, আসুন const_cast-এর জন্য ব্যবহার করার জন্য ডেটা টাইপের int-এর "c" বলি৷
  • এখন আমাদের ধ্রুবক পয়েন্টার "b" const_cast এ পাস করুন এবং এটিকে আমাদের পয়েন্টার "c" এর সমান রাখুন।
  • অবশেষে আমাদের পয়েন্টার "c" এর মান পরিবর্তন করুন। এটি স্বয়ংক্রিয়ভাবে আমাদের ধ্রুবক পয়েন্টার "b" যে মানের দিকে নির্দেশ করছে তাতে স্বয়ংক্রিয়ভাবে পরিবর্তন আনবে।

অ্যালগরিদম

Start
Step 1 -> In function main()
Declare a constant int a=20
Declare a constant pointer int* b=&a
Declare a pointer int*c = const_cast<int *>(b)
Assign *c=40
Stop

উদাহরণ

#include <iostream>
using namespace std;
int main() {
   const int a = 20;
   const int* b = &a;
   cout<<"old value is"<<*b<<"\n";
   int* c=const_cast<int *>(b);
   *c=40;
   cout<<"new value is"<<*b;
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
old value is 20
new value is 40

এখানে, ধ্রুবক পয়েন্টার "b" ধ্রুবক ভেরিয়েবল "a" এর মান=20 এর দিকে নির্দেশ করা হয়েছে যা অপরিবর্তনীয়। কিন্তু একই ডেটা টাইপের তৃতীয় নন-কনস্ট্যান্ট পয়েন্টার "c" তৈরি করে এবং const_cast ব্যবহার করে আমরা সেই ধ্রুবক মান পরিবর্তন করতে সক্ষম হয়েছি।

পয়েন্টার "c" এর মান পরিবর্তনের ফলে ধ্রুবক মান 20 এর পরিবর্তন হয়েছে যেখানে ধ্রুবক পয়েন্টার "b" নির্দেশ করছে। তাই const_cast ব্যবহার করার আগে আউটপুট মান ছিল 20 এবং এটি ব্যবহারের পরে আউটপুট মান ছিল 40৷

const_cast এর অন্যান্য ব্যবহার

যেকোন প্রোগ্রামে, const_cast অন্য কোন ফাংশনে ধ্রুবক ডেটা প্রেরণ করতে ব্যবহার করা যেতে পারে যা ধ্রুবক ডেটা গ্রহণ করে না।

উদাহরণ

#include <iostream>
using namespace std;
int change(int* p2) {
   return (*p2 * 10);
}
int main() {
   const int num = 100;
   const int *p = #
   int *p1 = const_cast <int *>(p);
   cout << change(p1);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
1000

নিম্নলিখিত প্রোগ্রামটি দেখায় যে কীভাবে আমরা কোন ধ্রুবক ডেটা গ্রহণ করে না এমন ফাংশন পরিবর্তন()-এ const_cast ব্যবহার করে 100 এর একটি ধ্রুবক মান পাস করতে পারি।

change() ফাংশনটি মানটি পায় এবং এটিকে 10 দ্বারা গুণ করে এবং এটিকে প্রধান() ফাংশনে ফিরিয়ে দেয় যা চূড়ান্ত আউটপুট তৈরি করে, অর্থাৎ 1000৷

যদি আমরা একই প্রোগ্রামটি const_cast ছাড়াই চালাই এবং পরিবর্তন() ফাংশনে সরাসরি ধ্রুবক মান পাস করার চেষ্টা করি, এটি ত্রুটি দেখাবে।


  1. C/C++ এ টাইপ কাস্ট কি?

  2. বৃদ্ধি ++ এবং হ্রাস -- C++ এ অপারেটর

  3. C++ এ কাস্টিং অপারেটর কি?

  4. C++ এ রিলেশনাল অপারেটর