2010-03-14 11 views
8

chicos, sé que esta pregunta es muy básica, pero he encontrado en pocas publicaciones (sitios web, libros) un estilo diferente de anulación de la función virtual. Lo que quiero decir es: si tengo clase base:¿Cómo anular la función virtual con buen estilo? [C++]

class Base 
{ 
public: 
virtual void f() = 0; 
}; 

en algunas publicaciones vi que anular este algunos autores quieren decir simplemente:

void f();  

y algunos todavía se repita la palabra clave virtual antes de vacío . ¿Qué forma de sobrescribir está en buen estilo? Gracias por sus respuestas.

+0

@James McNellis - Gracias, por alguna extraña razón (y la razón es que en Polonia lo llamamos sobrescribir (Dios, ¿por qué tenemos que tratar de ser siempre más inteligente en Polonia?)) Estaba convencido de que el correcto forma de llamar a este mecanismo. Gracias de nuevo. –

Respuesta

13

Esto es puramente una cuestión de gusto. Se pueden hacer algunos argumentos débiles en cuanto al valor de auto-documentación de algunos estilos versus la no redundancia de otros.

+0

Es bueno ver que la primera respuesta es la mejor. Tenga en cuenta también que el nuevo estándar agrega algunos decoradores al documento y verifica por qué está sobrecargando, anulando, escondiendo, etc. –

3

No es necesario agregar la palabra clave virtual a un método que sobrescribe en una subclase ya que este calificador no se puede eliminar omitiéndolo en las declaraciones de las subclases.

Sin embargo, es una buena práctica repetir la palabra clave virtual ya que documenta qué funciones derivadas son virtuales en la clase base.

Esto también es recomendado por 'High Integrity C++ Coding Standard Manual'.

que está vinculado en el C++ FAQ.

0

Yo personalmente uso ambos estilos: virtual significa que el método puede ser anulado.

Así que tenemos dos casos:

  • si así lo desea el usuario de su clase para saber que el método puede ser anulado, utilice el virtual palabra clave
  • si prefiere ocultar este hecho (porque usted proporciona nuevos métodos, por ejemplo después de la Template Pattern), entonces no utilice la palabra clave virtual

supongo que es una forma más de (ab?) usando la palabra clave.

Cuestiones relacionadas