Methode dans une strucutre

Signaler
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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.
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

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
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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é.
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

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 !
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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);