2011-08-29 20 views
34

Eventuali duplicati:
C++ static virtual members?Possiamo avere un metodo statico virtuale? (C++)

possiamo avere un metodo statico virtuale (in C++)? Ho provato a compilare il seguente codice:

#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; 
} 

ma il compilatore dice che:

member 'f' cannot be declared both virtual and static 

quindi credo che la risposta è no, ma perché?

grazie, Ron

risposta

47

No. static su una funzione in una classe significa che la funzione non ha bisogno di un oggetto su cui operare. virtual significa che l'implementazione dipende dal tipo dell'oggetto chiamante. Per statico non esiste un oggetto chiamante, quindi non ha senso avere entrambi static e virtual sulla stessa funzione .

2

Poiché la classe non ha un puntatore this. In c'è la tabella di ricerca delle funzioni virtuali. Un rapido google può dirti di più sulla tabella di ricerca delle funzioni virtuali.

4

Non pensare che questo sia possibile perché è possibile chiamare A::F(); senza avere l'oggetto A. Rendendolo virtuale e statico significherebbe una contraddizione.

+3

Ah, poi mezzi statici che * ciò non esiste, mezzi virtuali che il metodo ha un puntatore this. La combinazione dei due rende una contraddizione. Bene grazie –

1

No, static funzione è come funzione globale, ma anche spazio dei nomi di classe all'interno. virtual implica eredità e reimplementare in classe derivata - non si può reimplementare funzione 'globale'.

Problemi correlati