Funções de amigos virtuais para uma classe base?

Eu estou no processo de aprender a língua e esta é uma dúvida noob.

É possível usar uma função de amigo virtual? Não sei se é possível, nem testei, mas poderia ser útil em algumas situações. Por exemplo, para o operador sobrecarregado << ().

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

Meu palpite é que é possível, mas não tenho certeza, pois uma função de amigo não é implementada no design de classes e, teoricamente, não faz parte dela (embora neste exemplo, conceitualmente, faz sentido que o operador << () seja um método, mas devido a limitações de sintaxe, não é possível implementá-lo como um).

EDIT: minha preocupação está relacionada com este exemplo:

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

neste array de objetos mistos, quero o operador correto << () chamado para cada um.

questionAnswers(5)

yourAnswerToTheQuestion