Depende de la semántica previstos de A, B, y C y la semántica de comparar(). La comparación es un concepto abstracto que no necesariamente tiene un único significado correcto (o ningún significado, para el caso). No hay una sola respuesta correcta para esta pregunta.
He aquí dos escenarios en los que se comparan significa dos cosas completamente diferentes con la misma jerarquía de clases:
class Object
{
virtual int compare(const Object&) = 0;
float volume;
};
class Animal : Object
{
virtual int compare(const Object&);
float age;
};
class Zebra : Animal
{
int compare(const Object&);
};
Podemos considerar (al menos) dos formas de comparar dos cebras: ¿cuál es mayor, y que tiene más volumen ? Ambas comparaciones son válidas y fácilmente computables; la diferencia es que podemos usar el volumen para comparar una cebra con cualquier otro objeto, pero solo podemos usar la edad para comparar las cebras con otros animales. Si queremos que compare() implemente la semántica de comparación de edades, no tiene sentido definir compare() en la clase Object, ya que la semántica no está definida en este nivel de la jerarquía. Vale la pena señalar que ninguno de estos escenarios requiere ningún tipo de conversión, ya que la semántica se define en el nivel de la clase base (ya sea Objeto al comparar el volumen o Animal al comparar la edad).
Esto plantea el problema más importante: que algunas clases no son adecuadas para una única función de comparación catch-all(). A menudo tiene más sentido implementar múltiples funciones que indiquen explícitamente qué se está comparando, como compare_age() y compare_volume(). La definición de estas funciones puede ocurrir en el punto en la jerarquía de herencia donde la semántica se vuelve relevante, y debe ser trivial adaptarlas a las clases secundarias (si es necesario adaptarlas). La comparación simple usando compare() u operador ==() a menudo solo tiene sentido con clases simples donde la implementación semántica correcta es obvia e inequívoca.
Larga historia corta ... "depende".
No, tiene sentido utilizar el operador ==. Para eso es para eso. No hay necesidad de una función de comparación. – jalf
@jalf Creo que quiere hacer una comparación mayor, igual o menor que la de strcmp(). Observe que Compare() devuelve un int, no un bool. –