¿Funciones virtuales de amigo para una clase base?

Estoy en el proceso de aprender el idioma y esta es una duda noob.

¿Es posible utilizar una función de amigo virtual? No sé si es posible, ni siquiera lo probé, pero podría ser útil en algunas situaciones. Por ejemplo, para el operador sobrecargado << ().

DerivedClass dc;
BaseClass &rbc = dc;
cout << rbc;

Supongo que es posible, pero no estoy seguro ya que una función de amigo no está implementada en el diseño de la clase, y teóricamente no es parte de ella (aunque en este ejemplo, conceptualmente tiene sentido que el operador << () debería ser un método, pero debido a las limitaciones de la sintaxis no es posible implementarlo como uno).

EDITAR: mi preocupación está relacionada con este ejemplo:

BaseClass bc;
DerivedClass dc;
BaseClass *pArr[2];
pArr[1] = bc;
pArr[2] = dc;
for (int i = 0; i < 2; i++)
    cout << pArr[i];

en esta matriz de objetos mixtos, quiero que se llame al operador correcto << () para cada uno.

Respuestas a la pregunta(5)

Su respuesta a la pregunta