web-dev-qa-db-fra.com

Pouvons-nous avoir une méthode statique virtuelle? (c ++)

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

40
Ron_s

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.

52
Michael Anderson

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.

4
RvdK

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.

2
EnabrenTane

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'.

1
ks1322