অতীতে আমি একটি উদাহরণ ব্যবহার করেছি। সুরক্ষিত পদ্ধতিগুলি প্রয়োগ-নির্দিষ্ট ফাংশন সরবরাহের জন্য দুর্দান্ত, যদিও বেস ক্লাসকে জিনিসগুলি সঠিকভাবে ট্র্যাক করার অনুমতি দেয়। একটি বেস ক্লাস বিবেচনা করুন যা একটি ওভারডেয়েবল ইনিশিয়ালাইজেশন ফাংশন সরবরাহ করে, তবে আরম্ভ করা হয়েছে কিনা তা নির্ধারণের জন্য অবশ্যই রাষ্ট্র থাকতে হবে:
class Base
{
private:
bool m_bInitialized;
public:
virtual void Initialize() = 0;
void setInitialized() { m_bInitialized = true; };
bool isInitialized() const { return m_bInitialized; };
}; // eo class Base
এখানে সব ঠিক আছে। ব্যতীত যখন কোনও উদ্ভূত শ্রেণি কল্পনা করতে বিরক্ত করে না setInitialized()
যে কেউ একে কল করতে পারে (আমরা এটিকে এখানে সুরক্ষিত করতে পারি, এবং সুরক্ষিত পদ্ধতিগুলি ব্যবহারের অন্য কারণ!)। আমি অনেকটা এমন শ্রেণিকে পছন্দ করি যা ভার্চুয়াল সুরক্ষিত সদস্যদের ব্যবহার করে:
class Base
{
private:
bool m_bInitialized;
protected:
virtual void InitializeImpl() = 0;
public:
void Initialize()
{
InitializeImpl();
m_bInitialized = true;
}; // eo Initialize
bool isInitialized() const { return m_bInitialized; };
}; // eo class Base
আমাদের নতুন ক্লাসে, সমস্ত সূচনা এখনও উদ্ভূত শ্রেণীর কাছে অর্পিত। নিক্ষিপ্ত হিসাবে একটি ব্যতিক্রম প্রদান, আমরা আমাদের পদ্ধতি বলবত হবে যে চুক্তি "এই শ্রেণি আরম্ভ হয়" চুক্তি বজায় রাখা।