ভার্চুয়াল সদস্যকে ব্যক্তিগত হিসাবে ঘোষণা করার জন্য সমস্ত কল করা সত্ত্বেও, যুক্তিটি কেবল জল ধরে না। প্রায়শই, একটি ভার্চুয়াল ফাংশনটির উত্পন্ন ক্লাসের ওভাররাইডকে বেস শ্রেণীর সংস্করণটি কল করতে হবে। এটি ঘোষণা করা হলে তা করা যায় না private
:
class Base
{
private:
int m_data;
virtual void cleanup() { /*do something*/ }
protected:
Base(int idata): m_data (idata) {}
public:
int data() const { return m_data; }
void set_data (int ndata) { m_data = ndata; cleanup(); }
};
class Derived: public Base
{
private:
void cleanup() override
{
// do other stuff
Base::cleanup(); // nope, can't do it
}
public:
Derived (int idata): base(idata) {}
};
আপনি আছে বেস বর্গ পদ্ধতি ঘোষণা করার protected
।
তারপরে, আপনাকে কোনও মন্তব্যের মাধ্যমে ইঙ্গিত করার কুৎসিত অভিযাত্রী নিতে হবে যে পদ্ধতিটি ওভাররাইড করা উচিত তবে কল করা উচিত নয়।
class Base
{
...
protected:
// chained virtual function!
// call in your derived version but nowhere else.
// Use set_data instead
virtual void cleanup() { /* do something */ }
...
এইভাবে হার্ব সটারের গাইডলাইন # 3 ... তবে ঘোড়া যাই হোক না কেন শস্যাগার বাইরে।
আপনি যখন protected
কোনও কিছু ঘোষণা করেন আপনি সুরক্ষিত ইন্টার্নালগুলি বুঝতে এবং সঠিকভাবে ব্যবহার করতে কোনও উদ্ভূত শ্রেণীর লেখকের উপর স্পষ্টভাবে বিশ্বাস স্থাপন করছেন, ঠিক যেভাবে কোনও friend
ঘোষণাপত্র private
সদস্যদের প্রতি গভীর বিশ্বাসকে বোঝায় ।
যে বিশ্বাসীরা সেই বিশ্বাস লঙ্ঘন করে খারাপ আচরণ পান (যেমন আপনার ডকুমেন্টেশনগুলি পড়ার বিরক্ত না করে 'ক্লুলেস' হিসাবে লেবেলযুক্ত) কেবল তাদেরই দোষ দেওয়া উচিত।
হালনাগাদ : আমার কিছু প্রতিক্রিয়া ছিল যা দাবি করে যে আপনি ব্যক্তিগত ভার্চুয়াল ফাংশনগুলি ব্যবহার করে এইভাবে ভার্চুয়াল ফাংশন বাস্তবায়ন "চেইন" করতে পারেন। যদি তা হয় তবে আমি অবশ্যই এটি দেখতে চাই।
আমি যে সি ++ সংকলকগুলি অবশ্যই স্পষ্টভাবে ব্যবহার করি তা উত্সযুক্ত শ্রেণি প্রয়োগের কোনও বেসরকারী বেস শ্রেণীর প্রয়োগকে কল করতে দেয় না।
যদি এই নির্দিষ্ট অ্যাক্সেসের অনুমতি দেওয়ার জন্য সি ++ কমিটি "প্রাইভেট" শিথিল করে রাখে, আমি ব্যক্তিগত বেসরকারী ভার্চুয়াল ফাংশনগুলির জন্য থাকতাম। যেমনটি দাঁড়িয়েছে, ঘোড়া চুরি হওয়ার পরেও আমাদের শস্যাগার দরজাটি তালাবন্ধ করার পরামর্শ দেওয়া হচ্ছে।