Methode dans une strucutre

cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009 - 31 mars 2007 à 15:13
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 31 mars 2007 à 18:38
Bonjour a tous,

Voila je suis entrain de faire un programme en C et j'aimerais faire comme des styles de classe, j'ai vaguement entendu parlé que l'on pouvait faire cela avec des structures et mon probleme est comment coder mes fonctions ?

C'est a dire j'ai ceci :

typedef struct{
    int variables;  
    void fonctions();
}C_Fakeclasse;

Donc aprés je peu faire ceci :
main(){
    C_Fakeclasse maclasse;
    maclasse.fonction();
}

Mais la comment je la code ma fonction c'est a dire en C++ on fait comme ca :

Maclasse::Mafonction(){
    //Moncode
}

Et en C avec une structure on fait comment ?
Car
C_Fakeclasse::fonctions(){
}
Ne marche pas :(
Merci d'avance de vos réponses !

5 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
31 mars 2007 à 15:25
Le C n'est pas fait pour faire ça...
Mais tu peux toujours utiliser un pointeur de fonction dans ta struct, comme dans les interfaces COM.
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
31 mars 2007 à 15:27
Et est ce qu'avec la fonction qui sera pointer dans ma structure je pourais acceder au variables qui a dans ma structure ? comme en c++

Merci
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
31 mars 2007 à 15:35
Il faut que le premier param des fonctions soit un pointeur vers ta struct, comme le fait le ptr this en c++, mais il est caché.
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
31 mars 2007 à 15:41
Arf.


Enfet le problème que j'ai est qu'il me faut absolument une fonction qui puisse
utiliser des variables mais dont je ne peu les passer en paramètre... :\ le
plus simple serai de mettre ces variables en Global mais ceci n'est pas pédagogique
:\ et je vais me faire allumer a mon oral a la fin de l'année c'est pour cela
que je cherche un moyen d'avoir une fonction qui utilise des variables mais je
ne lui passe rien en paramètre et il ne me faut pas de variable globale :\ (Comme une classe en C++ quand on les met en Private:)


(C’est pour une interruption sur un OS9 ^^)






Si tu connais un moyen je suis preneur :)

Merci d'avance !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
31 mars 2007 à 18:38
Voici la construction pour créer des struct
qui contiennent des fonctions membres :


// Déclaration en avant d'une struct
struct ITest;


// Type fonctions à utiliser (accesseur/mutateur d'1 membre)
typedef void SetVarPtr(ITest*, long);
typedef long GetVarPtr(ITest*);


// Structure contenant les pointeurs sur les fonctions
typedef struct
{
   SetVarPtr* SetVar;
   GetVarPtr* GetVar;


} IVtbl;


// Une interface ITest
typedef struct
{
   long lVar;
   IVtbl* lpVtbl;


} ITest;




// Les fonctions
void SetVar(ITest* This, long lg)
{
 This->lVar = lg;
}


long GetVar(ITest* This)
{
 return This->lVar;
}


// Initialise table des pointeurs vers les fonctions réelles
static const IVtbl IVtblObject = {SetVar, GetVar};


// Déclare, alloue et rempli l'interface
ITest* pTestStruct;


pTestStruct = (ITest*)GlobalAlloc(GMEM_FIXED, sizeof(ITest));
pTestStruct->lpVtbl = &IVtblObject;
pTestStruct->lVar = 0;


// On appelle les fonctions qui accèdent au membre de la struct
pTestStruct->lpVtbl->SetVar(pTestStruct, 0x0a000000);
long lvalue = pTestStruct->lpVtbl->GetVar(pTestStruct);


// Libère
GlobalFree((HGLOBAL)pTestStruct);
0
Rejoignez-nous