Maison  >  Article  >  développement back-end  >  Pourquoi ne pouvez-vous pas surcharger les fonctions statiques et non statiques en C ?

Pourquoi ne pouvez-vous pas surcharger les fonctions statiques et non statiques en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 14:16:01331parcourir

Why Can't You Overload Static and Non-Static Functions in C  ?

Surcharge de fonctions statiques avec des fonctions non statiques en C

En C, la surcharge de fonctions statiques et non statiques portant le même nom n'est pas permis. Ceci est explicitement indiqué dans le standard C, qui interdit la surcharge de fonctions qui diffèrent uniquement par le type de retour ou qui ont le même nom et les mêmes types de paramètres si l'un d'eux est statique.

Considérez la classe suivante :

<code class="cpp">class Foo {
    string bla;
    Foo() { bla = "nonstatic"; }

    void print() { cout << bla << endl; }
    static void print() { cout << "static" << endl; }
};</code>

Bien que cette définition de classe puisse sembler plausible, elle n'est pas valide selon la norme C. La surcharge des fonctions statiques et non statiques est interdite car cela entraînerait une ambiguïté, car les fonctions statiques peuvent également être appelées à l'aide de la syntaxe d'accès aux membres d'objet (.).

Par exemple, dans l'extrait de code suivant :

<code class="cpp">Foo f;
f.print();</code>

Il n'est pas clair si la fonction d'impression statique ou la fonction d'impression non statique doit être appelée.

De plus, C ne fournit pas de moyen de déterminer si une fonction est appelée de manière statique. ou pas, comme en PHP. Le mot clé this, qui pointe vers l'objet pour lequel la fonction est invoquée, sera toujours non nul.

En résumé

Surcharge des fonctions statiques et non statiques avec le même nom n'est pas autorisé en C . De plus, il n'existe aucun mécanisme permettant de différencier les appels de fonction statiques et non statiques au sein d'un corps de fonction.

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