nIn order to implement a virtual friend, we must implement a virtual
helper member function that performs the operation that we want and then call it from the non-member function.
nWe must be careful to declare the object for which we want polymorphic behavior to be a pointer or a reference in the helper function.
nIf the object is passed by value to the non-member function then dynamic binding cannot be used because we have an object and not a pointer or reference.
nIt is best to make the helper functions protected or private in the base class and in all derived classes and
then the non-member function a
friend of the class.