44 votes

Peut-on avoir une méthode statique virtuelle ? (c++)

Duplicata possible :
Membres virtuels statiques du C++ ?

Peut-on avoir une méthode statique virtuelle (en C++) ? J'ai essayé de compiler le code suivant code :

#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

56voto

Michael Anderson Points 21181

Non. static sur une fonction dans 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 le statique, il n'y a pas d'objet appelant, donc cela n'a pas de sens d'avoir à la fois static y virtual sur la même fonction .

4voto

RvdK Points 10793

Ne pensez pas que c'est possible car vous pourriez appeler A::F(); sans avoir l'objet A. Le rendre virtuel et statique signifierait une contradiction.

2voto

EnabrenTane Points 5262

Parce que la classe n'a pas de this pointeur. C'est là que se trouve la table de consultation des fonctions virtuelles. Une rapide recherche sur Google vous en dira plus sur la table de consultation des fonctions virtuelles.

1voto

ks1322 Points 9238

Non, static est comme une fonction globale, mais aussi dans l'espace de nom de la classe. virtual implique l'héritage et la réimplémentation dans la classe dérivée - vous ne pouvez pas réimplémenter la fonction "globale".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X