Marisol
Una función de amigo es una función que puede acceder a los miembros privados de una clase sin ser miembro de esa clase. (También puede tener clases de amigos)
Una función se define como virtual para que el polimorfismo pueda funcionar: si tiene un puntero a la clase base e invoca una función virtual, se llama a la versión de la función de la clase derivada. Sin funciones virtuales, tendría que lanzar un puntero a una clase base a un puntero a una clase derivada para invocar la función deseada.