2011-08-29 17 views
34

Duplicar posibles:
C++ static virtual members?¿Podemos tener un método estático virtual? (C++)

podemos tener un método estático virtual (en C++)? He tratado de compilar el código siguiente:

#include <iostream> 
using namespace std; 

class A 
{ 
public: 
    virtual static void f() {cout << "A's static method" << endl;} 
}; 

class B :public A 
{ 
public: 
    static void f() {cout << "B's static method" << endl;} 
}; 

int main() 
{ 
    /* some code */ 
    return 0; 
} 

pero el compilador dice que:

member 'f' cannot be declared both virtual and static 

así que supongo que la respuesta es no, pero ¿por qué?

gracias, Ron

Respuesta

47

static en una función en una clase significa que la función no necesita un objeto para operar. virtual significa que la implementación depende del tipo de objeto llamante. Para static no hay objeto de llamada, por lo que no tiene sentido tener static y virtual en la misma función .

2

Porque la clase no tiene un puntero this. Ahí está la tabla de búsqueda de función virtual. Un google rápido puede brindarle más información sobre la tabla de búsqueda de funciones virtuales.

4

No creo que esto sea posible porque podría llamar al A::F(); sin tener el objeto A. Convertirlo en virtual y estático significaría una contradicción.

+3

Aha, entonces estático significa que * esto no existe, virtual significa que el método tiene este puntero. La combinación de los dos hace una contradicción. Genial gracias –

1

No, static funciona como la función global, pero también dentro del espacio de nombres de la clase. virtual implica herencia y reimplementación en clase derivada; no se puede volver a implementar la función 'global'.

Cuestiones relacionadas