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

C++-এ ফাইনাল ক্লাস সিমুলেট করা (জাভার final class-এর মত)

জাভা/সি#-তে final কীওয়ার্ড দিয়ে ক্লাস ইনহেরিটেন্স বন্ধ করা যায়। C++11-এর আগে এটি সরাসরি সাপোর্ট করা নয়, কিন্তু একই ইফেক্ট পাওয়ার টেকনিক আছে।

টেকনিক: প্রাইভেট কনস্ট্রাক্টর সহ ভার্চুয়াল বেস ক্লাস

  1. একটি MakeFinal ক্লাস বানান যার কনস্ট্রাক্টর private।
  2. টার্গেট ক্লাস (FinalClass) কে MakeFinal-এর friend করুন।
  3. FinalClass কে virtual বেস হিসেবে MakeFinal-এ ইনহেরিট করুন।
  4. ডেরাইভড ক্লাস MakeFinal-এর কনস্ট্রাক্টর কল করতে পারবে না (প্রাইভেট), তাই ইনহেরিটেন্স ব্লক হয়।

উদাহরণ

#include <iostream>
using namespace std;

class FinalClass; // ফরওয়ার্ড ডিক্লেরেশন

class MakeFinal {
private:
    MakeFinal() { cout << "MakeFinal ctor" << endl; }
    friend class FinalClass;
};

class FinalClass : virtual MakeFinal { // virtual inheritance জরুরি
public:
    FinalClass() { cout << "FinalClass ctor" << endl; }
};

// ইনহেরিট করার চেষ্টা - কম্পাইল এরর
class Derived : public FinalClass {
public:
    Derived() { cout << "Derived ctor" << endl; }
};

int main() {
    Derived d; // Error: 'MakeFinal::MakeFinal()' is private
    return 0;
}

আউটপুট (এরর)

In constructor 'Derived::Derived()': [Error] 'MakeFinal::MakeFinal()' is private

সঠিক ব্যবহার: FinalClass অবজেক্ট তৈরি

int main() {
    FinalClass obj; // OK
    return 0;
}

আউটপুট

MakeFinal ctor
FinalClass ctor

C++11+: সরাসরি class FinalClass final { ... }; ব্যবহার করা যায়। উপরের টেকনিক লিগ্যাসি কোডের জন্য।

  1. C++-এ মাল্টিপল ইনহেরিট্যান্স

  2. C++-এ নেস্টেড ক্লাস

  3. C++-এ লোকাল ক্লাস

  4. জাভাতে ফাইনাল ক্লাস