Maison >développement back-end >C++ >Pouvez-vous appeler des méthodes membres statiques sur des instances de classe en C ?

Pouvez-vous appeler des méthodes membres statiques sur des instances de classe en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 20:57:02242parcourir

Can You Call Static Member Methods on Class Instances in C  ?

Appel de méthodes membres statiques sur des instances de classe

En C , les méthodes membres statiques peuvent être appelées directement ou via une instance de classe. Ce comportement peut soulever des questions concernant les attentes de la norme concernant l'utilisation des méthodes membres statiques.

La norme C indique explicitement que les méthodes membres statiques peuvent être appelées sans instance. Cependant, cela n'exclut pas la possibilité de les appeler via une instance.

Considérons l'exemple de code suivant :

class Test {
public:
    static void DoCrash() { std::cout << "TEST IT!" << std::endl; }
};

int main() {
    Test k;
    k.DoCrash(); // calling a static method like a member method...
}

Dans cet exemple, la méthode statique DoCrash() est invoquée sur un instance de la classe Test (k). Étonnamment, ce code se compile et s'exécute sans erreur, affichant "TEST IT!".

Pourquoi est-ce autorisé ?

La norme permet d'appeler des méthodes membres statiques via des instances pour plusieurs raisons :

  • Cohérence :Il permet un accès cohérent aux méthodes membres statiques et non statiques.
  • Prise en charge des modèles : Il permet l'écriture de code générique pouvant fonctionner avec des méthodes statiques ou non statiques.
  • Raisons historiques : À l'origine, C autorisait l'accès direct aux membres statiques via des instances, et ce comportement était préservé pour maintenir la compatibilité du code existant.

Points supplémentaires

Bien que l'appel de méthodes membres statiques via des instances soit autorisé, il est généralement déconseillé. En effet, cela peut entraîner une confusion et un comportement inattendu, notamment lorsque le code est mis à jour ou modifié. Pour plus de clarté et d'exactitude, il est préférable d'appeler les méthodes membres statiques directement en utilisant le nom de la classe, comme dans Test::DoCrash().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn