জাভা/সি#-তে final কীওয়ার্ড দিয়ে ক্লাস ইনহেরিটেন্স বন্ধ করা যায়। C++11-এর আগে এটি সরাসরি সাপোর্ট করা নয়, কিন্তু একই ইফেক্ট পাওয়ার টেকনিক আছে।
টেকনিক: প্রাইভেট কনস্ট্রাক্টর সহ ভার্চুয়াল বেস ক্লাস
- একটি
MakeFinalক্লাস বানান যার কনস্ট্রাক্টরprivate। - টার্গেট ক্লাস (
FinalClass) কেMakeFinal-এরfriendকরুন। FinalClassকেvirtualবেস হিসেবেMakeFinal-এ ইনহেরিট করুন।- ডেরাইভড ক্লাস
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 { ... }; ব্যবহার করা যায়। উপরের টেকনিক লিগ্যাসি কোডের জন্য।