এই বিভাগে আমরা C++ এ প্রাপ্ত ক্লাস পদ্ধতির সীমাবদ্ধ অ্যাক্সেসের আকর্ষণীয় তথ্য সম্পর্কে আলোচনা করব। আমরা কিছু উদাহরণ দেখব এবং আউটপুট বিশ্লেষণ করব C++-এ প্রাপ্ত ক্লাস পদ্ধতি ব্যবহার করার সীমাবদ্ধতা সম্পর্কে আরও জানতে।
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print function from the base class" << endl; } }; class DerivedClass: public BaseClass { private: void display() { cout << "Print function from the derived class" << endl; } }; int main() { }
এটি ঠিক আছে, এখন যদি আমরা এটি দিয়ে প্রধান ফাংশন ব্লক প্রতিস্থাপন করি, আমরা নীচের মত একটি ত্রুটি পাব -
int main() { DerivedClass d; d.display(); }
আউটপুট
main.cpp: In function ‘int main()’: main.cpp:20:15: error: ‘virtual void DerivedClass::display()’ is private within this context d.display(); ^ main.cpp:13:10: note: declared private here void display() { ^~~~~~~
এটি একটি ত্রুটি দেখায় কারণ প্রাপ্ত ক্লাসের পদ্ধতিটি ব্যক্তিগত। এখন এই বাস্তবায়ন দেখুন, যেখানে বেস পয়েন্টার ব্যবহার করে ফাংশন কল করা হয়। এটি ফাংশনকে কল করতে পারে।
উদাহরণ (C++)
#include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print function from the base class" << endl; } }; class DerivedClass: public BaseClass { private: void display() { cout << "Print function from the derived class" << endl; } }; int main() { BaseClass *b = new DerivedClass; b->display(); }
আউটপুট
Print function from the derived class
উপরের প্রোগ্রাম থেকে, আমরা দেখতে পাচ্ছি যে প্রাইভেট ফাংশন DerivedClass::display() বেস ক্লাস পয়েন্টারের মাধ্যমে কল করা হচ্ছে, প্রোগ্রামটি ভাল কাজ করে কারণ display() ফাংশন বেস ক্লাসে সর্বজনীন। অ্যাক্সেস স্পেসিফায়ারগুলি কম্পাইলের সময় যাচাই করা হয় এবং প্রদর্শন() বেস ক্লাসে সর্বজনীন। রান টাইম চলাকালীন, শুধুমাত্র পয়েন্টেড অবজেক্টের সাথে সংশ্লিষ্ট ফাংশনটি কল করা হয় এবং অ্যাক্সেস স্পেসিফায়ার যাচাই করা হয় না। তাই বেস ক্লাসের একটি পয়েন্টারের মাধ্যমে ডেরাইভড ক্লাসের একটি প্রাইভেট ফাংশন বলা হচ্ছে।