(Figured this was too subjective for SO, so posting here...)
I have some behavior that I can implement in various ways. At least two methods are shows in the code snippet below. Presume that the m_well data member is correctly set somehow at object construction time.
struct Behavior { virtual bool behavesWell() { return true; } private: bool m_well; public: bool behavesMemberWell() { return m_well; } }; struct OtherBehavior : public Behavior { virtual bool behavesWell() { return false; } }; Obviously the one relies upon virtual dispatch, and the other merely the return of a data member.
A third, non-shown method would likely have the non-virtual public member function not return a fixed data member, but instead call a virtual - lets leave that aside for the purpose of this please.
What would lead you to one or other other of these two methods of implementing functionality, such that a user of this class can interrogate an object's behavior?