Duplicata possible:
membres virtuels statiques C++?
Peut-on avoir une méthode statique virtuelle (en C++)? J'ai essayé de compiler le code suivant:
#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;
}
mais le compilateur dit que:
member 'f' cannot be declared both virtual and static
donc je suppose que la réponse est non, mais pourquoi?
merci Ron
Non. static
sur une fonction d'une classe signifie que la fonction n'a pas besoin d'un objet pour fonctionner. virtual
signifie que l'implémentation dépend du type de l'objet appelant. Pour statique, il n'y a pas d'objet appelant, donc cela n'a aucun sens d'avoir à la fois static
et virtual
sur la même fonction.
Ne pensez pas que cela soit possible car vous pourriez appeler A::F();
sans avoir l'objet A. Le rendre virtuel et statique signifierait une contradiction.
Parce que la classe n'a pas de pointeur this
. Il y a la table de recherche de fonction virtuelle. Un rapide google peut vous en dire plus sur la table de recherche des fonctions virtuelles.
Non, la fonction static
est similaire à la fonction globale, mais également à l'intérieur de l'espace de noms de classe. virtual
implique l'héritage et la réimplémentation dans une classe dérivée - vous ne pouvez pas réimplémenter la fonction 'globale'.