[C] On peut ajouter un constructeur à une struct?

On peut ajouter un constructeur à une struct? [C] - Programmation

Marsh Posté le 20-02-2002 à 20:00:01    

Tout est dans le titre?
:)

Reply

Marsh Posté le 20-02-2002 à 20:00:01   

Reply

Marsh Posté le 20-02-2002 à 20:34:50    

non, à la limite tu peux faire un pointeur de fonction qui va créer une structure, par exemple:
 
#include <stdlib.h>
 
struct maStruct
{
 
   struct maStruct *(*constructeur)();
}
 
struct maStruct *constructeur()
{
 
   struct maStruct *retval;
 
   retval=(maStruct *)malloc(sizeof(maStruct));
 
   retval->constructeur=constructeur;
 
   return retval;
}
 
int main()
{
   
   struct maStruct struct1,*struct2;
 
   struct1.constructeur=constructeur;
 
   struct2=struct1.constructeur();
 
   free(struct2);
 
   return 0;
}
 
 
 
 
 
 
si non fait du C++ ;)

Reply

Marsh Posté le 20-02-2002 à 21:20:27    

Oki, c'est ce que je pensais. Donc à partir de là, j'aimerais savoir, au niveau de la rapidité de l'exécution, si il vaut mieux créer:
 
1. struct test
{
int a, b, c;
};
 
et remplir en faisant: test temp; temp.a = x; temp.b = y; temp.c = z;
 
 
2. class test
{
public:
int a, b, c;
test(int x, int y, int z) {a = x; b = y; c = z;}
};
 
et remplir en faisant ça: test temp(x, y, z);

Reply

Marsh Posté le 20-02-2002 à 22:35:24    

si tu cherche la rapidité je pense qu'il vaut mieu faire:
 
struct maStruct test;
 
test.a=1;
 
tu économise un jump comme ça, par contre ton code va être un poil plus volumineux

Reply

Marsh Posté le 21-02-2002 à 00:44:55    

Alons, les 2 methodes sont aussi rapides les unes que les autres. Ca vous dit quelque chose le code inline ?
 
Et je crois que tu peux mettre un constructeur sur une struct, mais à ce niveau la, il n'y a plus beaucoup de difference avec une classe ou tout est publique :)

Reply

Marsh Posté le 21-02-2002 à 07:59:26    

Kristoph a écrit a écrit :

Alons, les 2 methodes sont aussi rapides les unes que les autres. Ca vous dit quelque chose le code inline ?
 
Et je crois que tu peux mettre un constructeur sur une struct, mais à ce niveau la, il n'y a plus beaucoup de difference avec une classe ou tout est publique :)  




 
Là je comprends pas tout, constructeur, classe... en C :??:
Je pense qu'il y a du avoir un bug qqpart (C++ plutôt je pense).


---------------
"Si ça peut déconner, ça va déconner..."
Reply

Marsh Posté le 21-02-2002 à 08:04:17    

il n'y a pas de constructeur dans une structure...


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 21-02-2002 à 09:10:47    

pas de constructeurs en C
par contre en C++ une struct peut avoir un constructeur
 
quand a la vitesse d'execution, je ne pense pas que la difference soit sensible, et en C je pense meme que le code genere doit etre identique...

Reply

Marsh Posté le 21-02-2002 à 10:08:47    

ba tu fais une macro :
 
#define constructeur_struct_A(x, y, z) {A.a=x; A.b=y; A.c=z}
 
mieux, tu def un tableau dynamique de struct + une fonction/macro qui ajoute une struct à ce tableau. Après faut voir pour gérer l'accès à ces structs dans le tableau.
 
C'est ce que je fais là : http://cycojesus.free.fr/progs/openglavity/index.htm (tu dl les sources et tu cherche la fonction initCorps())

 

[jfdsdjhfuetppo]--Message édité par cycojesus--[/jfdsdjhfuetppo]


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

Marsh Posté le 21-02-2002 à 15:31:15    

une struct = classe en C++
faut pas chercher c'est comme ca.
la seule difference c'est que
par defaut tout membre non specifie
d'une classe est private
et tout membre non specifie
d'une struct est public.
(pour se rapprocher de ce que
c'etait en C)
et puis plus la peine de faire de typedef
comme en C.
 
A+
LEGREG

Reply

Marsh Posté le 21-02-2002 à 15:31:15   

Reply

Marsh Posté le 21-02-2002 à 15:59:47    

c pas jolie d'utiliser des struct en C++


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed