Pointeurs de fonction dans des structures

Contenu du snippet

Ce code montre comment stocker vos fonctions dans une structure et cmt les utiliser par la suite...

Source / Exemple :


#include <stdlib.h>
#include <unistd.h>

typedef struct compteur {
	int nb;

	void (*increment)(struct compteur *this);
	void (*decrement)(struct compteur *this);

	int (*getValue)(struct compteur *this);
	void (*setValue)(struct compteur *this, int n);

	void (*free)(struct compteur *this);
} compteur;

/* définition des différentes méthodes */
void __compteur__increment(compteur *this){
	this->nb++;
}

void __compteur__decrement(compteur *this){
	this->nb--;
}

int __compteur__getValue(compteur *this){
	return this->nb;
}

void __compteur__setValue(compteur *this, int n){
	this->nb = n;
}

/* fin des méthodes  générales */

/* méthodes particulières */

	// destructeur
	void __compteur__free(compteur *this){
		free(this); // libération
	}

	// constructeur
	compteur *Compteur() {
		compteur *n = malloc(sizeof(compteur)); // allocation

		n->nb = 0;

		// set des fonctions
		n->increment = __compteur__increment;
		n->decrement = __compteur__decrement;
		n->getValue = __compteur__getValue;
		n->setValue = __compteur__setValue;
		n->free = __compteur__free;

		return n;
	}
/* fin méthodes particulières */

int main(void){
	// création
	compteur *c = Compteur();

	// traitement
	c->setValue(c,20);
	c->increment(c);
	c->increment(c);

	// affichage
	printf("%d\n",c->getValue(c)); 

	// libération
	c->free(c);
}

Conclusion :


Voila, ce code doit donner 22 (20+1+1).
Réalisé pour Jingle

A voir également

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.