কম্পিউটার টিউটোরিয়াল

C/C++-এ ফরওয়ার্ড ডিক্লেরেশন (Forward Declaration) কখন ব্যবহার করা যায়?

ফরওয়ার্ড ডিক্লেরেশন (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)
  • বেস ক্লাস হিসেবে ব্যবহার করা যায় না
  • শুধু পয়েন্টার/রেফারেন্স ডিক্লেয়ার/ইউজ করা যায়
  1. C/C++-এ মডিফায়ার কেন ব্যবহার করি?

  2. জাভা ৯-এ StackWalker.getCallerClass() মেথড কখন ব্যবহার করবেন?

  3. জাভাতে getClass() মেথড কখন ব্যবহার করবেন

  4. জাভাতে String ক্লাসের intern() মেথড কখন ব্যবহার করবেন?