Peut-on initialiser les champs d'une structure? - C++ - Programmation
Marsh Posté le 05-09-2002 à 03:36:08
Non, x est une forme, pas une valeur.
On peut initialiser à l'instanciation:
Code :
|
Maintenant, si tu veux qu'à chaque fois que tu crée un x il soit automatiquement initialisé avec a=0,b=1...
...alors il est temps de passer au C++ qui dispose de constructeurs faits pour ça:
Code :
|
Marsh Posté le 05-09-2002 à 11:17:28
Musaran a écrit a écrit : Non, x est une forme, pas une valeur. On peut initialiser à l'instanciation:
|
Fondamentalement y a t-il une différence entre struct et class, faite par le complo C++ ?
Marsh Posté le 05-09-2002 à 12:29:52
toxin> ça doit être une histoire d'encapsulation...
Sinon j'ai une autre question.
J'ai toujours ma structure X:
typedef struct
{int a;
int b;
}x;
Et je veux savoir si on peut comparer deux instances de X:
X toto;
X titi;
toto.a=1;
toto.b=2;
titi.a=0;
titi.b=5;
Est-ce qu'on peut faire:
if (toto==titi) {...}
Marsh Posté le 05-09-2002 à 12:35:49
heffer a écrit a écrit : toxin> ça doit être une histoire d'encapsulation... |
par défaut (si on spécifie rien) c'est private dans une classe et public dans une structure, non ?
Marsh Posté le 05-09-2002 à 12:36:12
heffer a écrit a écrit : Est-ce qu'on peut faire: if (toto==titi) {...} |
si tu redéfinis l'opérateur ==, oui
sinon, non
Marsh Posté le 05-09-2002 à 12:37:28
antp a écrit a écrit : si tu redéfinis l'opérateur ==, oui sinon, non |
Ok mais là je travaille en C donc je ne peux pas le redéfinir si?
Marsh Posté le 05-09-2002 à 12:41:00
je pense pas, en effet
Marsh Posté le 05-09-2002 à 13:02:15
J'ai encore une autre question (j'ai l'impression d'avoir tout oublié).
Si je veux modifier mon toto, est-ce qu'il vaut mieux passer le pointeur de toto en argument ou retourner un autre X:
void modifier (X* toto)
{toto->a=54;}
ou
X modifier (X toto)
{X temp;
temp=toto;
temp.a=54;
return temp;
}
Marsh Posté le 05-09-2002 à 13:32:48
heffer a écrit a écrit : Ok mais là je travaille en C donc je ne peux pas le redéfinir si? |
Y'a une solution dite à l'arrache :
Ca marche tres bien pour ton exemple !!!
Code :
|
Marsh Posté le 05-09-2002 à 13:38:05
heffer a écrit a écrit : J'ai encore une autre question (j'ai l'impression d'avoir tout oublié). Si je veux modifier mon toto, est-ce qu'il vaut mieux passer le pointeur de toto en argument ou retourner un autre X: void modifier (X* toto) {toto->a=54;} ou X modifier (X toto) {X temp; temp=toto; temp.a=54; return temp; } |
Moi dans ce cas là je passe un pointeur sur l'instance de toto en parmetre dans le cas ou je veux modifier les champs. ET je retourne l'etat de l'operation : OK ou ERREUR.
Code :
|
Marsh Posté le 06-09-2002 à 02:45:28
Toxin a écrit a écrit : Fondamentalement y a t-il une différence entre struct et class, faite par le complo C++ ? |
A part l'histoire du public/private par défaut, C++ ne fait aucune différence entre struct et class.
heffer a écrit a écrit : Et je veux savoir si on peut comparer deux instances de X |
Suffisait d'essayer... non, ça marche pas.
On peut faire:
Code :
|
Mais si il y a des trous dans la structure à cause d'alignements, ce n'est pas garanti.
Reste alors une macro:
Code :
|
T'as pas envie de passer au C++ où c'est possible ?
Citation : Si je veux modifier mon toto, est-ce qu'il vaut mieux passer le pointeur de toto en argument ou retourner un autre X: |
Si toto est gros, il est plus rapide de passer par adresse.
Si toto a beaucoup de membres à modifier, il est plus rapide de passer/renvoyer par valeur.
Si la fonction doit servir dans des expressions, il vaut mieux renvoyer par valeur.
Perso, je préfères par adresse (référence en C++).
Marsh Posté le 09-09-2002 à 22:14:12
Musaran a écrit a écrit : Non, x est une forme, pas une valeur. On peut initialiser à l'instanciation:
|
Pour les gens qui ont fait plus de 2 heures de C++ dans leur vie, ils peuvent mettre x() : a(0), b(1) {}
c'est beaucoup plus elegant, et ca évite d'initialiser 2 fois la valeur.
edit : et en passant, a=b=0 c'est pas terrible non plus, c'est même carrément cochon.
Marsh Posté le 10-09-2002 à 05:30:50
Je connais...
Je voulais pas l'effrayer avec un truc incompréhensible .
a=b=0, c'est juste la flemme qui m'a pris comme ça...
Marsh Posté le 22-11-2009 à 20:28:52
comment peut on initialiser une tableau de structure en C
par exemple
struct text
{char id[20];
char pw[20];
};
typdef struct text;
text tableau[100];
Marsh Posté le 22-11-2009 à 21:33:05
text tableau[100] = { {"lol","rofl"}, .... , {"test","test} };
Marsh Posté le 23-11-2009 à 22:54:20
le strcmpr dans le langage C rutern soit 0 ,1ou bien -1 .dans ce cas
j'ai apple la fonction strcmpr(tableau.id[0],"add" ); il me retourne 1
sachant que tablea.id est initialise :strcpy(tableau.id,"add" );
==> normalement la fonction strcmpr doit retouner comme valeur "0"
et c'est l'errur que j'arrive pas à trouveeeeeeer
merci
Marsh Posté le 27-11-2009 à 01:01:22
je veux savoir les fonction predefinie du langage C qui permet de bloquer l'instruction pour une moment
et merciiiiiiii
Marsh Posté le 27-11-2009 à 10:42:54
kamola a écrit : je veux savoir les fonction predefinie du langage C qui permet de bloquer l'instruction pour une moment |
et en décrypté, tu veux savoir quoi ?
Marsh Posté le 27-11-2009 à 13:07:15
des fonction comme le getch() par exemple qui bloque l'instruction
par exemple si dans un programme on veut ploquer une instruction pour 2 min comment faire
Marsh Posté le 27-11-2009 à 14:09:09
si tu veux faire de la temporisation aussi grande, tu demandes à ton os de te mettre en attente (sleep, wait ou autre suivant quelle API tu dois utiliser, ca va varier) comme ca, tu ne consommes pas de ressources inutilement
j'ai comme l'impression que tu es sous du windows, donc ce qu'il te faut se trouve là : http://msdn.microsoft.com/en-us/li [...] S.85).aspx
Sinon, regarde du côté de la doc des threads posix
Marsh Posté le 16-12-2009 à 19:39:52
salam 3alikom
les fonctions de la bibliotheque<dos.h> ne marchent sur le dev C++ pk et comment faire pour les etuliser
et marci bcp
Marsh Posté le 04-09-2002 à 19:46:05
Par ex:
typedef struct
{int a=0;
int b=1;
}x;
Ça marche?