2010-03-26 24 views
14

Tengo el siguiente código dentro del archivo .h y no estoy seguro de qué hace la instrucción de asignación y cómo se llama correctamente?Archivo de cabecera C++ y declaración de función que termina en "= 0"

virtual void yield() = 0; 

pensé que la función devuelve un valor de 0 por defecto, pero ya que esta función devuelve void estoy un poco confundido. ¿Alguien puede comentar sobre esto y quizás decir cómo puedo referirme a esta tarea, me refiero a cómo se llama en la jerga de C++?

Gracias.

+2

lea sobre las funciones virtuales. –

+1

Y para obtener información sobre por qué se usa esta extraña sintaxis, consulte http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0 –

Respuesta

18

Esta es una función virtual pura. Esto significa que las subclases deben implementar esta función; de lo contrario, son abstractas, lo que significa que no puede crear objetos de esa clase.

class ISomeInterface { 
public: 
    virtual std::string ToString() = 0; 
} 

class SomeInterfaceImpl : public ISomeInterface { 
public: 
    virtual std::string ToString() { 
     return "SomeInterfaceImpl"; 
    } 
} 

La idea es que una clase puede exponer un determinado método, pero las subclases tienen que implementarlo. En este ejemplo, ISomeInterface expone un método ToString, pero no hay una implementación predeterminada sensata para eso, por lo que hace que el método sea puramente virtual. Las subclases como SomeInterfaceImpl pueden proporcionar una implementación adecuada.

+0

Usted explicó qué es una función virtual pura. El OP preguntó qué hace el "= 0"? No respondiste esa pregunta. –

+0

El OP pregunta * "¿cómo se llama en la jerga de C++?" * - esto se responde en la primera frase de mi respuesta. Si siente que esto necesita una explicación más detallada, no dude en editar mi respuesta, agregue una respuesta propia o explique en un comentario. –

+0

Ok. Lo suficientemente justo. Estaba confundido por el "= 0", pero creo que terminé descifrando esto. El "= 0" es lo que le dice al compilador que no habrá un cuerpo para la función, esto lo convierte en un "puro virtual". ¿Correcto? –

3

si es un método virtual puro (también conocido como resumen) mira aquí o Google http://www.artima.com/cppsource/pure_virtual.html

= 0 no significa valor de retorno por defecto, que es una notificación de que la función virtual pura es

+1

No, no lo está; indica que la función es pura. Las funciones virtuales puras pueden tener cuerpos. –

+0

entonces, ¿cómo difieren de solo virtuales? – Andrey

+0

Impiden que se instale la clase que los contiene. –

8

La sintaxis = 0 declara una pure virtual function, no tiene nada que ver con el valor de retorno.

Si una clase contiene al menos una función virtual pura, eso hace que la clase sea "abstracta", lo que significa que no se puede crear una instancia.

En la práctica, dichas clases deben concretarse mediante la creación de subclases y la implementación de la (s) función (es) virtual (es).

0

La sintaxis es oscura, pero el "= 0" significa que el método es una función virtual pura. Hace que la clase sea abstracta (no se puede crear una instancia) y su implementación se deja en las clases derivadas.

Esto se utiliza cuando todo lo que quiere definir es una interfaz. Use la palabra clave virtual cuando quiera definir una interfaz y también proporcione una implementación predeterminada.

Cuestiones relacionadas