একটি কাস্ট একটি স্পেশাল অপারেটর যা একটি ডেটা টাইপকে অন্য ডেটা টাইপে কনভার্ট করতে বাধ্য করে। একটি অপারেটর হিসেবে, কাস্ট ইউনারি এবং অন্য যেকোনো ইউনারি অপারেটরের মতো একই প্রেসিডেন্স রাখে।
অধিকাংশ C++ কম্পাইলার দ্বারা সমর্থিত সবচেয়ে জেনারেল কাস্ট নিচের মত:
(type) expression
যেখানে type হলো ডিজার্ড ডেটা টাইপ। C++-এ অন্যান্য কাস্টিং অপারেটরও আছে, সেগুলো নিচে তালিকাভুক্ত:
- const_cast<type> (expr) - const_cast অপারেটর একটি কাস্টে const এবং/অথবা volatile এক্সপ্লিসিটলি ওভাররাইড করতে ব্যবহৃত হয়। টার্গেট টাইপ অবশ্যই সোর্স টাইপের মতোই হতে হবে শুধু এর const বা volatile অ্যাট্রিবিউট পরিবর্তন ছাড়া। এই টাইপের কাস্টিং পাস করা অবজেক্টের const অ্যাট্রিবিউট ম্যানিপুলেট করে, সেট করা অথবা রিমুভ করা।
- dynamic_cast<type> (expr) - dynamic_cast একটি রানটাইম কাস্ট পারফর্ম করে যা কাস্টটির বৈধতা ভেরিফাই করে। যদি কাস্ট করা সম্ভব না হয়, তবে কাস্ট ফেল করে এবং এক্সপ্রেশন null ইভ্যালুয়েট করে। dynamic_cast পলিমরফিক টাইপের ওপর কাস্ট পারফর্ম করে এবং একটি A* পয়েন্টারকে B* পয়েন্টারে কাস্ট করতে পারে শুধু যদি যে অবজেক্টকে পয়েন্ট করা হচ্ছে সেটি আসলে একটি B অবজেক্ট হয়।
- reinterpret_cast<type> (expr) - reinterpret_cast অপারেটর একটি পয়েন্টারকে যেকোনো অন্য টাইপের পয়েন্টারে পরিবর্তন করে। এটি পয়েন্টার থেকে ইন্টিজার টাইপে এবং তার বিপরীতে কাস্ট করার জন্যও অনুমতি দেয়।
- static_cast<type> (expr) - static_cast অপারেটর একটি নন-পলিমরফিক কাস্ট পারফর্ম করে। উদাহরণস্বরূপ, এটি একটি বেস ক্লাস পয়েন্টারকে ডেরাইভড ক্লাস পয়েন্টারে কাস্ট করতে ব্যবহার করা যেতে পারে।
উদাহরণ
এই কাস্টগুলো খুব কেস-স্পেসিফিক। আসুন কম্পাইলার দ্বারা ইমপ্লিমেন্টেড কাস্টের একটি উদাহরণ বিবেচনা করি:
#include <iostream>
using namespace std;
main() {
double a = 21.09399;
float b = 10.20;
int c;
c = (int) a;
cout << "Line 1 - Value of (int)a is: " << c << endl;
c = (int) b;
cout << "Line 2 - Value of (int)b is: " << c << endl;
return 0;
}
আউটপুট
এটি নিচের আউটপুট দেবে:
Line 1 - Value of (int)a is: 21 Line 2 - Value of (int)b is: 10