class JeuDeSociete { protected : int nombreDeJoueurs ; virtual void initialiserLeJeu ()=0; virtual void faireJouer(int joueur)=0; virtual bool partieTerminee ()=0; virtual void proclamerLeVainqueur ()=0; public : void jouerUnePartie ( int nombreDeJoueurs ) { this−>nombreDeJoueurs = nombreDeJoueurs; initialiserLeJeu (); int j=0; while( ! partieTerminee () ) { faireJouer(j ); j = (j+1) % nombreDeJoueurs; } proclamerLeVainqueur ( ) ; } }; /* 1: si la méthode est abstraite (=0) elle est nécessairement virtuelle puisque cela signifie que la classe est abstraite, qu'elle ne peut être instanciée, qu'une instance correspondant est nécessairement instance d'une sous-classe concrète et que par conséquent la méthode qui sera appelée doit être la méthode implmentée dans la sous-classe y compris à travers un pointeur ou une référence. 2: =0 permet (1) de ne pas implanter la méthode (à ce niveau conceptuel c'est peut-être impossible) (2) de rendre la classe abstraite (i.e. correspond à un concept pur ou une abstraction partielle) 3: jouerUnePartie() n'est pas déclarée abstraite car on souhaite visiblement que son implémentation soit si possible toujours celle appelée quelque soit l'implémentation concrète de la classe... (réflexion : pourquoi « si possible » ?) 4: le terme patron/template est employé car il s'agit effectivement d'une définition (partielle) de classe, laquelle doit être dérivée afin de construire des jeux spécifiques mais dans laquelle le déroulement du jeu est pré-défini. On a donc un patron de jeu s'affranchissant des spécificités des jeux... 5: à faire soi-même */