Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 15 sur 18

fonctions membres statique C++

  1. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 234

    fonctions membres statique C++

    Bonjour,

    dans une annale d'épreuve d'info, je suis tombé sur la déclaration d'une classe en C++ dans laquelle se trouvaient des méthodes statiques privées. Je pense qu'il s'agit d'une erreur du sujet, ou alors une subtilité m'échappe.

    Pouvez-vous confirmer?

    Merci.
    Dernière modification par Jack ; 29/05/2012 à 21h50. Motif: orthographe
     


    • Publicité



  2. lou_ibmix_xi

    Date d'inscription
    juin 2006
    Localisation
    Toulon
    Âge
    34
    Messages
    1 205

    Re : fonctions membres statique C++

    Attention, je ne suis pas un cador du C++, ma réponse est à prendre avec des pincettes. Mais ça ne me choque pas "à prioris", tout dépends de ce que fait la méthode. On pourrait imaginer une classe ne supportant qu'un nombre limité d'insatnce, alors une méthode statique privée, ne faisant qu'incrémenter le nombre d'instance de la classe et appelée par le constructeur, et son pendant, décrémentant le même compteur, appelé par le destructeur... Ces méthodes doivent être statiques (puisque disponible à la 1ère instanciation), et privée (puisque seul le créateur et le destructeur de la classe doivent y accéder)
    Tant qu'il y à de la vis, il y a du tourne-vis
     

  3. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 234

    Re : fonctions membres statique C++

    Merci pour ta réponse. Il s'agit en effet de gérer un compteur d'instance, donc un membre statique, privé lui aussi dans l'exemple.

    Ces méthodes doivent être statiques (puisque disponible à la 1ère instanciation)
    Je ne comprends pas trop. Une fonction statique est disponible en dehors de toute instantiation.

    Pourquoi donc définir cette fonction comme statique. Une fonction privée non statique aurait pu être appelée par le constructeur et le destructeur pour gérer le nombre d'instances. Me trompe-je?

    A+
     

  4. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    1 188

    Re : fonctions membres statique C++

    Bonjour,
    Voici une explication de mon bouquin :
    Code:
    class*X*{
    
        static*int*x;
       static const int size =  5;
        class*inner*{
          static*float*f;
          void func(void);   //*déclaration imbriquée
           };
    public :
       char array[size];
    };
    int X::x = 1;
    float X::inner:: f = 3.14;  //*initialisation imbriquée statique
    
    void X::inner::func(void) {    / *définit la fonction imbriquée***/**}
    
    La principale utilité des membres statiques est qu'ils permettent de suivre des données communes à tous les objets d'une classe, comme le nombre d'objets créés, ou la dernière ressource utilisée parmi l'ensemble de celles que partagent tous les objets. Les membres statiques servent aussi à*:
    
     	Réduire le nombre des noms globaux visibles
     	Mettre en évidence les objets statiques qui appartiennent logiquement à une classe
     	Permettre un contrôle d'accès à leurs noms.
    Mais il est vrai que dans l'exemple cité, l'association des 3 termes "méthode, static et private" n'est pas évidente.
    Ceci dit, l'intérêt d'un membre static est qu'il n'en existe qu'une seule copie, qu'il y ait ou non d'instance déclarée de sa classe.
    On se demande alors comment appeler cette fonction si elle est private ?

    PS, je ne sais pas d'où viennent les étoiles ?
    Dernière modification par Dlzlogic ; 29/05/2012 à 12h58.
     

  5. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    1 188

    Re : fonctions membres statique C++

    Après essai, ça peut marcher, si la fonction est appelée par un membre de la classe.
    Donc, en conclusion, je n'imagine pas vraiment l'intérêt.
    J'en conclue que c'est une erreur du sujet, dans la mesure où ça ne sert à rien.
     


    • Publicité



  6. lou_ibmix_xi

    Date d'inscription
    juin 2006
    Localisation
    Toulon
    Âge
    34
    Messages
    1 205

    Re : fonctions membres statique C++

    Pourquoi donc définir cette fonction comme statique. Une fonction privée non statique aurait pu être appelée par le constructeur et le destructeur pour gérer le nombre d'instances. Me trompe-je?
    Pour ce cas prècis je suppose que oui, je ne vois en effet pas l'intérêt d'utiliser une méthode privée statique au lieu d'une fonction statique. En revanche, on peut estimer que si la méthode statique privée doit accéder à des attributs privés (ou appeler des méthodes privées), alors il faut bien que ce soit une méthode, ou alors il faudrait la déclarer en fonction amie, et les attributs / méthodes auquels elle doit accéder en "protected" et non en private, je crois me semble-t'il? Je t'avais prévenu, je ne fais pas de C++
    Tant qu'il y à de la vis, il y a du tourne-vis
     

  7. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 234

    Re : fonctions membres statique C++

    Pour ce cas prècis je suppose que oui
    ??? Donc je me trompe?

    on peut estimer que si la méthode statique privée doit accéder à des attributs privés (ou appeler des méthodes privées), alors il faut bien que ce soit une méthode
    Une méthode statique ne peut accéder qu'à des membres statiques.

    ou alors il faudrait la déclarer en fonction amie, et les attributs / méthodes auquels elle doit accéder en "protected" et non en private, je crois me semble-t'il?
    Ceci ne concerne que l'héritage. Toutes les fonctions non statique d'une classe peuvent accéder à tous les membres de cette même classe, qu'ils soient privés ou autres.

    Je t'avais prévenu, je ne fais pas de C++
    C'est pas grave, toute idée est la bienvenue.

    A+
     

  8. jslovi

    Date d'inscription
    juin 2012
    Localisation
    Pas loin de Waterloo
    Messages
    17

    Re : fonctions membres statique C++

    Je ne vois rien d'étonnant à une méthode privée et statique. Cela peut permettre d'encapsuler une variable statique dans la-dite méthode de manière à limiter les opérations dessus. Genre :

    private static int foo::count(int i = 0)
    {
    static counter = 0;

    if ( i > 0 ) count += 1;
    if ( i < 0 ) count -= 1;

    return counter;
    }

    Ou un truc genre (pas testé).

    Donc, ici, le compteur interne ne pourra varier que par pas de une unité, même si on appelle foo::count(-5)

    Je ne pense pas que toute construction de langage a son utilité et sa spécifité : il y a toujours le petit truc qui en fait quelque chose d'unique.
     

  9. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 234

    Re : fonctions membres statique C++

    Pourquoi faire simple quand on peut faire compliqué? Je ne vois pas en quoi le fait de rendre la méthode statique va apporter quoi que ce soit. Le code suivant aura le même effet:
    Code:
    private int foo::count(int i) { static int counter = 0; if ( i > 0 ) counter += 1; if ( i < 0 ) counter -= 1; return counter; }
    En passant:
    Code:
    private static int foo::count(int i = 0)
    ne passera pas à la compilation car on ne peut pas initialiser un paramètre dans la définition d'une fonction.

    A+
    Dernière modification par Jack ; 11/06/2012 à 21h39.
     

  10. jslovi

    Date d'inscription
    juin 2012
    Localisation
    Pas loin de Waterloo
    Messages
    17

    Re : fonctions membres statique C++

    1. L'intérêt de la méthode statique est la performance, et surtout le fait qu'elle peut-être appelée sans référence à une instance.

    Par exemple, avec une méthode non statique, j'aimerais bien savoir comment tu peux faire ceci :

    if ( foo::count() != 0 ) ...

    Puisque quand counter vaut zéro, il n'y a aucun instance.

    Par exemple, dans une classe de gestion de liste d'objet ()genre STL, tu ne t'en tireras pas autrement qu'avec des fonction statiques, dont certaines peuvent être privées ou protégées.

    Je le répète, toute construction à un intérêt spécifique. C'est justement par des commentaires pareils, et en utilisant mal C++, qu'on fait trop compliqué, trop bogué, et que la réputation de C++ a été abîmée. Il faut l'utiliser de manière juste et pertinente. C'est de la dentelle. Ne crois jamais que tu sais tout, que tu as tout découvert, en C++. Il y a toujours de nouvelles choses à apprendre, même après 10 ou 20 ans. C'est un langage extraordinairement riche.

    2. J'ai voulu donner une idée, je n'ai pas compilé le code. Je ne vais pas passer 1/4h sur chaque post. Pour quelqu'un qui n'a plus fait de C++ depuis près de 10 ans, ce n'est pas si mal, je crois, d'écrire ça en 2 minutes . (Par contre, j'ai été bêta-testeur du compilateur C++ de Silicon Graphics, et de Metrowerks, le meilleur compilateur sur MacOS avant l'ère MacOS X... et je leur en ai trouvé des bugs, et pas des faciles).

    Maintenant, je ne vais pas rentrer dans une polémique : chacun prend ce qu'il veut des autres.
    Dernière modification par jslovi ; 12/06/2012 à 08h14.
     

  11. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 234

    Re : fonctions membres statique C++

    1. L'intérêt de la méthode statique est la performance, et surtout le fait qu'elle peut-être appelée sans référence à une instance.

    Par exemple, avec une méthode non statique, j'aimerais bien savoir comment tu peux faire ceci :

    if ( foo::count() != 0 ) ...
    Je n'ai aucun problème avec l'intérêt des méthodes statiques d'une manière générale. J'avais un problème lorsqu'elles étaient privées. Comment fais-tu pour appeler count() si elle est privée?

    A+
     

  12. jslovi

    Date d'inscription
    juin 2012
    Localisation
    Pas loin de Waterloo
    Messages
    17

    Re : fonctions membres statique C++

    Comme toute autre méthode privée : d'autres méthode de la classe. Dans ce cas-ci probablement in fine des méthode statiques publiques, du genre dans l'exemple de listes des add, remove etc..., ou pour les listes des push, pop etc...
     

  13. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 234

    Re : fonctions membres statique C++

    Dans ce cas-ci probablement in fine des méthode statiques publiques
    On tourne en rond. Pourquoi rendre cette méthode statique? Une méthode privée suffirait si c'est uniquement pour se faire appeler par des méthodes statiques publiques.

    A+
     

  14. Faith

    Date d'inscription
    décembre 2004
    Localisation
    Paris
    Âge
    33
    Messages
    8 384

    Re : fonctions membres statique C++

    Citation Envoyé par Jack Voir le message
    Une méthode privée suffirait si c'est uniquement pour se faire appeler par des méthodes statiques publiques.
    Les méthodes statiques publiques peuvent être appelées sans instanciation, et sans instanciation, il faut bien que la méthode privée en question soit elle aussi statique, sinon elle n'est pas appelable. Non ?

    Enfin... ça fait longtemps que je n'ai pas joué avec du C++
     

  15. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    1 188

    Re : fonctions membres statique C++

    Bonjour,
    Conformément à ce que j'ai dit dans mon post précédent, je n'ai pas réussi à compiler et exécuter une méthode privée statique.
    Le rajout d'une méthode intermédiaire pour permettre de l'appeler, ne présente à mon avis pas beaucoup d'intérêt.
    J'ai fait un gestionnaire d'instance, mais dans ma logique, ce gestionnaire doit être indépendant des classes concernées.
    Les petites fonctions "vachement géniales", j'en suis revenu, je préfère faire du solide et que j'arrive à comprendre quand je vais y jeter un coup d’œil.
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. Membres fantômes
    Par Jaina dans le forum Biologie
    Réponses: 5
    Dernier message: 13/04/2004, 16h57