Entiendo que puede haber una razón para declarar privada o protegida una función virtual implementada (en lugar de pura). Afaik, si declaras que un método virtual implementado está protegido, tu clase hija puede llamar al método de la clase base (y nadie más puede hacerlo). Si declara que es privado, entonces solo la clase base puede invocar la implementación predeterminada del método virtual.¿Hay alguna diferencia entre una función virtual pura privada y protegida?
Sin embargo, con los virtuales puros, no hay una implementación base ... ¿No es funcionalmente equivalente declarar un virtual puro como privado o como protegido? Un virtual puro protegido no tiene sentido porque nunca se puede invocar el método correspondiente de la clase base. ¿Hay algún escenario donde una virtual pura protegida tiene algún sentido?
Hay algunos temas similares en SO, pero no pude encontrar nada que respondiera de forma concisa a mi pregunta.
Puede implementar 'friend' para las interfaces. – Matthew
El método virtual puro puede tener cuerpo y se puede invocar explícitamente como base :: foo(). – iammilind