You can use a virtual getter to enforce inheritance on members :
class Base_class
{
public:
Base_class(int int_value, short short_value) :
m_encapsulated_class(int_value, short_value)
{};
protected:
virtual Base_encapsulated_class Get_encapsulated_class() /* = 0 if you want to enforce encapsulated derivation */
{
return m_encapsulated_class;
}
private:
Base_encapsulated_class m_encapsulated_class;
};
class Derived_class : public Base_class
{
public:
Derived_class(int int_value, short short_value, bool boolean_value) :
Base_class(int_value, short_value)
{};
~Derived_class(void)
{};
protected:
virtual Base_encapsulated_class Get_encapsulated_class()
{
return m_derived_encapsulated_class;
}
private:
Derived_encapsulated_class m_derived_encapsulated_class;
};