Well, I can't say if this is the responsibility of the base class or not, and won't get into the perils of inheritance based contracts here.
In any case, you can force some class to override a method - "Clone()" for example, by making it a pure virtual member of an abstract class
public ref class ClonableBase abstract
{
public:
virtual void Clone() = 0;
}
note the "abstract" and the "=0;". The abstract allows the class to contain pure virtual members without warning, and the =0; means that this method is pure virtual - that is, it doesn't contain a body. Note that you can not instantiate an abstract class.
Now you can
public ref class ClonableChild : public ClonableBase
{
public:
virtual void Clone();
}
void ConableChild::Clone()
{
//some stuff here
}
If you do NOT have the Clone override in ClonableChild, you get a compiler error.