Soyez le premier à donner votre avis sur cette source.
Snippet vu 6 613 fois - Téléchargée 20 fois
#include <iostream> using namespace std; class MyClass { public: void aff1 ()const {cout << "1" << endl;} // 5 méthodes aff void aff2 ()const {cout << "2" << endl;} void aff3 ()const {cout << "3" << endl;} void aff4 ()const {cout << "4" << endl;} void aff5 ()const {cout << "5" << endl;} }; const void impr1(); //4 fonctions impr (implémentées après le main) const void impr2(); const void impr3(); const void impr4(); typedef void (MyClass::*PFM)() const; //Définition d'un type de pointeur de méthode int main () { cout << "********* Pointeur sur fonction ***********\n\n\n"; const void (*pt1)(); //Pointeur de fonction : pt1 pt1 = 0; int get_choice = 0; cout << "(1)impr1 - (2)impr2 - (3)impr3 - (4)impr4 : "; cin >> get_choice; //Demande une action à réaliser switch (get_choice) { case 1:pt1 = &impr1;break; //pt1 pointe sur l'actin case 2:pt1 = &impr3;break; case 3:pt1 = &impr3;break; default:pt1 = &impr4;break; } (*pt1)(); // execute la fonction à l'adresse pt1. cout << ("\n\n\n\n"); cout<< "********* Tableau de pointeurs sur fonction ***********\n\n\n"; int MaxArray = 4; const void (*ptfonc[MaxArray])(); //Tableau de pointeur de fonction : ptfonc short get; for (short i = 0; i < MaxArray; i++) { cout << "(0)Quitter - (1)impr1 - (2)impr2 - (3)impr3 - (4)impr4 : "; cin >> get; switch (get) { case 1:ptfonc[i] = &impr1;break; case 2:ptfonc[i] = &impr3;break; case 3:ptfonc[i] = &impr3;break; case 4:ptfonc[i] = &impr4;break; default: ptfonc[i] = 0; } } cout << ("\n\n\n"); for (short i = 0; i < MaxArray; i++) { if (ptfonc[i] ==0) continue; cout << " "; (*ptfonc[i])(); } cout << ("\n\n\n\n"); cout << "********* Pointeur sur fonction membre ***********\n\n\n"; void (MyClass::*ptf)() const; //Pointeur de méthode : ptf ptf = 0; MyClass *pClass2 = 0; int choice = 0; cout << "1:Aff1 - 2:Aff2 - 3:Aff3 - 4:Aff4 - 5:Aff5 :"; cin >> choice; switch (choice) { case 1: ptf = &MyClass::aff1;break; //Affecte la fonction membre à ptf case 2: ptf = &MyClass::aff2;break; case 3: ptf = &MyClass::aff3;break; case 4: ptf = &MyClass::aff4;break; case 5: ptf = &MyClass::aff5;break; } pClass2 = new MyClass; (pClass2->*ptf)(); //Execute la fonction membre de Pt2 contenue à l'adresse ptf cout << ("\n\n\n\n"); cout<< "********* Tableau de pointeurs sur fonction membre ***********\n\n\n"; MaxArray = 5; //Tableau de Pointeur de méthode : ClassFuncs PFM ClassFuncs [5] = {&MyClass::aff1, &MyClass::aff2, &MyClass::aff3, &MyClass::aff4, &MyClass::aff5 }; MyClass *pClass = 0; int Method; bool fQuit = false; while (!fQuit) { cout << "0:Quitter - 1:Aff1 - 2:Aff2 - 3:Aff3 - 4:Aff4 - 5:Aff5 :"; cin >> Method; if (Method <=0 || Method >= MaxArray+1) { fQuit = true; } else { pClass = new MyClass; (pClass->*ClassFuncs[Method - 1])(); //Execute la méthode contenue à l'adresse [Method - 1] delete pClass; } } cout << ("\n\n\n"); system ("PAUSE"); return 0; } //Implémentation des fonctions : const void impr1 () { cout << "1" << endl;} const void impr2 () { cout << "2" << endl;} const void impr3 () { cout << "3" << endl;} const void impr4 () { cout << "4" << endl;}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.