considerar:¿Sobrescribe un método virtual no const ocultar una sobrecarga const?
#include <iostream>
using namespace std;
struct A {
virtual void f() { cout << "A::f" << endl; }
virtual void f() const { cout << "A::f const" << endl; }
};
struct B : public A {};
struct C : public A {
virtual void f() { cout << "C::f" << endl; }
};
int main()
{
const B b;
b.f(); // prints "A::f const"
const C c;
c.f();
// Compile-time error: passing ‘const C’ as ‘this’ argument of
// ‘virtual void C::f()’ discards qualifiers
}
(. Estoy usando GCC)
Así que parece que la versión const de f() se oculta en C. Esto tiene mucho sentido para mí, pero es ¿ordenado por el estándar?
"Virtual" es una pista falsa. No estamos llamando a ninguna 'f' de forma virtual (a través de un puntero o referencia de clase base) aquí. Todas las búsquedas de 'f' encuentran la' f' más derivada. – MSalters
Virtual y const no se aplican realmente a la pregunta, pero los he dejado como etiquetas ya que no veo mucho daño y no es necesario incluir una etiqueta más relevante. –
Estoy de acuerdo con 'virtual', pero' const' es de lo que se trata la pregunta. Reemplazando 'f()' oculta 'f() const'. – Ari