2010-10-08 11 views
7

Básicamente, quiero la funcionalidad del compilador C# de su palabra clave override en mi código C++.¿Hay alguna manera de marcar (en tiempo de compilación) métodos "reemplazados" cuyas firmas no coincidan con la firma base?

class Base 
{ 
    virtual int foo(int) const; 
}; 

class Derived : public Base 
{ 
    virtual int foo(int); // wanted to override Base, but forgot to declare it const 
}; 

Como todos sabemos, el código anterior compilará bien, pero producirá un comportamiento extraño en el tiempo de ejecución. Me encantaría que mi compilador C++ captara mi pobre implementación con algo como la palabra clave override de C#. ¿Hay alguna palabra clave como "anulación" que se introduce en C++, o estamos atrapados con #define override virtual para mostrar nuestra intención? (en realidad, no hago esto, odio usar el preprocesador para "extender" el idioma).

Respuesta

1

Si no puede esperar para C++ 0x, Visual C++ ya tiene esta palabra clave de anulación. (Desde 2005, creo). Ahí la sintaxis es:

virtual int foo(int) override; 

No está obligado a escribirlo, sin embargo. Y es una extensión de microsoft no estándar.

+0

disculpas a Naveen - la suya es la respuesta "futura" correcta; sin embargo, para mis necesidades actuales (yo uso VS2005), ¡esto funciona! Marqué esta respuesta como "respondiendo" a mi pregunta, pero +1 a la respuesta de Naveen – franji1

3

Hasta donde sé, esto no es posible con el estándar actual. Puedes hacerlo en el próximo C++ 0x. Consulte aquí para obtener más detalles: Explicit virtual function overrides

+0

Cada vez que descubro algo sobre C++ 0x encuentro que la sintaxis es más fea y fea ... Sin duda, soy yo, ¿verdad? – dreamlax

+0

+1: vea mi comentario sobre "respuesta" qeustion – franji1

Cuestiones relacionadas