ফরওয়ার্ড ডিক্লেরেশন (class ClassName;) কম্পাইলারকে বলে যে এই নামের একটি ক্লাস আছে, সংজ্ঞা পরে আসবে। এটি ইনকমপ্লিট টাইপ (incomplete type) তৈরি করে।
উদাহরণ
class Person; // ফরওয়ার্ড ডিক্লেরেশন
void myFunc(Person* p) { // পয়েন্টার/রেফারেন্স ব্যবহার করা যায়
// p->name অ্যাক্সেস করা যাবে না (incomplete type)
}
class Person { // সংজ্ঞা পরে
string name;
};
কখন ব্যবহার করবেন?
- সার্কুলার ডিপেন্ডেন্সি: A.h-এ B ব্যবহার, B.h-এ A ব্যবহার। হেডার ফাইলে ফরওয়ার্ড ডিক্লেরেশন দিয়ে সমাধান।
- কম্পাইল টাইম হ্রাস: হেডার ফাইলে ফুল ক্লাস ডেফিনিশন না দিয়ে শুধু ফরওয়ার্ড ডিক্লেরেশন (PIMPL ইডিওম)。(《Pimpl idiom》)
- ইন্টারফেস হেডার সরল রাখতে: প্রাইভেট ডেটা হেডার থেকে লুকাতে।
সীমাবদ্ধতা
ইনকমপ্লিট টাইপের সাথে:
- অবজেক্ট তৈরি করা যায় না (
Person p;- এরর) sizeof(Person)করা যায় না- মেম্বার অ্যাক্সেস করা যায় না (
p->name) - বেস ক্লাস হিসেবে ব্যবহার করা যায় না
- শুধু পয়েন্টার/রেফারেন্স ডিক্লেয়ার/ইউজ করা যায়