L’instanciation

Prototype


L’écriture de type de données abstrait présuppose une bonne connaissance des pointeurs tant pour le maniement des structures\footnote{Voir p. ??.} que pour la mise en place des méthodes.

Rappel

  • En C, une fonction elle-même n’est pas une variable mais il est possible de définir des pointeurs de fonctions que l’on peut affecter, placer dans des tableaux (de pointeurs de fonctions), passer en argument à des fonctions ou faire retourner par des fonctions…

Déclaration

  • La déclaration d’un pointeur de fonction se fait de la façon suivante : int (*ptf) (int,char *) ; Déclaration d’un pointeur de fonction pour une fonction qui retourne un entier et a deux arguments, un entier et un pointeur de type char.
  • Si on écrit : int *ptf (int,char *); on écrit un prototype… Les parenthèses autour de l’identificateur sont là pour préciser qu’il s’agit d’un pointeur et nom d’une fonction bien précise.

Initialisation et utilisation

    • Un pointeur déclaré peut être initialisé comme toute variable, mais ici avec un nom de fonction.
      Exemple : int LireLigne (char *) ;
            
      main ()
      {
          char    tab[256]         ;
          int     n                ;
          int     (* ptf) (char *) ;
      
          ptf = LireLigne ;            /* Initialisation.    */
      
          n = (*ptf) (tab) ;           /* Appel de LireLigne.*/
      }
      
    • Dans le module Liste.c \footnote{c.f. Annexe}, on initialise les pointeurs de fonction de la structure fonctions définie dans le fichier Liste.h :
        
      void * lier_liste () 
      {
          Liste.creer        = &creer        ;
          Liste.copier       = 0             ;
          Liste.detruire     = &detruire     ;
          ...
          Liste.retablir     = &retablir     ;
          Liste.afficher     = &afficher     ; 
      }
      
    L’instanciation