What is a protocol class?
An abstract class is a protocol class if:
it neither contains nor inherits from classes that contain member
data, non-virtual functions, or private (or protected) members of
it has a non-inline virtual destructor defined with an empty
all member functions other than the destructor including inherited
functions, are declared pure virtual functions and left undefined.