C++

Prérequis

Une bonne connaissance du C. Voir la page sur le langage C.

Le cours

Les TD

  1. Révisions de C
  2. Du C et un peu de C++
  3. La classe String
  4. Des collections simples
  5. Avaleur et découpeur de flot
  6. Il ne peut en rester qu'un!!
  7. Des articles, des clients et des factures
  8. Un gestionaire de documents
  9. Un gestionaire de documents répartis
  10. Un gestionaire de rendez-vous
  11. Une petite IHM avec fluid
  12. Evaluation d'expressions
  13. Evaluation d'expressions (2)
  14. Des templates

Foire aux questions

Comment compiler?

 
C'est comme en C sauf qu'a la place de gcc on met g++
 
g++ monprog.cpp
 
 
Attention, il faut utiliser le gcc/g++ qui se trouve dans /usr/local/bin.
Cela implique peut être des modifications de votre environnement (dans votre ~/.cshrc) :
 
    ajoutez le chemin /usr/local/bin dans votre variable shell PATH. Sous csh, en fin de fichier .cshrc, on ajoute : 
 
setenv PATH /usr/local/bin:${PATH}
 
    ajouter le chemin /usr/local/lib dans votre variable shell LD_LIBRARY_PATH. Sous csh, en fin de fichier .cshrc, on ajoute : 
 
setenv LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH}
 
 

Renan DESHOUILLERES wrote:

 
>bonjour,
>
>j'ai un petit probleme de programmation. je travail en C++, et j'ai besoin d'utiliser un pointeur de fonction.
>
>j'ai créé une classe DialogSound, et dans le constructeur je doit faire appelle a la fonction FMOD_SetSynchCallback(xxxx, pointeurdefonction, xxx). Le problemme est qu'il faudrai que la fonction pointé soit propre à chaque objet. Or, en c++ on ne pas fiare ca :/
>
>j'ai lu sur internet que l'on pouvai utiliser des Functor mais j'arrive pas bien a comprendre comment ca marche (doc en anglais qui n'est pas tès simple).
>
>pourriez vous me dire comment ca marche, ou me rediriger vers une explication compréhensible...
>
>merci
>
>Renan DESHOUILLERES
>
>
 
voyons ca :
 
class DialogSound {
    DialogSound(FMOD_Synch * monSync) {
          (*monSync)(this); /* avec un parametre par exemple */
    }
};
 
class DialogSoundPourTruc : public DialogSound {
    DialogSoundPourTruc() : DialogSound(new FMOD_Synch_truc) {
    }
};
 
class DialogSoundPourMachin : public DialogSound {
    DialogSoundPourMachin() : DialogSound(new FMOD_Synch_machin) {
    }
};
 
class FMOD_Synch {
    void operator()(DialogSound * aDialogSound) = 0;
};
 
class FMOD_Synch_truc : public  FMOD_Synch {
    void operator()(DialogSound * aDialogSound) {
       /* ici, ce que je doit faire pour un DialogSoundPourTruc */
    }
};
 
class FMOD_Synch_machin : public  FMOD_Synch {
    void operator()(DialogSound * aDialogSound) {
       /* ici, ce que je doit faire pour un DialogSoundPourMachin */
    }
};
 
main() {
    DialogSound * mondsound = f();
    /* f est la fonction du systeme qui va instancier un DialogSoundPourTruc ou bien un
    DialogSoundPourMachin. Ca peut etre un switch (il en faut bien un quelque part) ou une table de hash globale ou variable statique
    du style : hash_map<string, DialogSound *(*)()> initialisee au demarrage
}
 
exemple avec une table de hash :
 
class DialogSoundPourTruc : public DialogSound {
    static DialogSound * CreateDialogSound();
    DialogSoundPourTruc() : DialogSound(new FMOD_Synch_truc) {}
};
 
DialogSound * CreateDialogSound() { return new DialogSoundPourTruc; }
 
class DialogSoundPourMachin : public DialogSound {
    static DialogSound * CreateDialogSound();
    DialogSoundPourMachin() : DialogSound(new FMOD_Synch_machin) {}
  };
 
DialogSound * CreateDialogSound() { return new DialogSoundPourMachin; }
 
class GlobalDialogSound {
    hash_map<string, DialogSound *(*)()> dialogSoundsIndex;
    GlobalDialogSound() {
       dialogSoundsIndex["DialogSoundPourTruc"] = DialogSoundPourTruc.CreateDialogSound;
       dialogSoundsIndex["DialogSoundPourMachin"] = DialogSoundPourMachin.CreateDialogSound;
   }
    DialogSound * getDialogSoundByName(string name) {
       return dialogSoundsIndex[name]();
   }
};
 
 
/* la globale */
GlobalDialogSound TheGlobalDialogSound;
 
main() {
    DialogSound  mondsound = TheGlobalDialogSound.getDialogSoundByName("DialogSoundPourTruc");
}