Passage d'un pointeur en paramètre de fonction - C++ - Programmation
Marsh Posté le 28-08-2002 à 16:28:16
y'a le passage par référence... Mais je suis plus sur de la syntaxe. Ca doit donner un truc du genre
void Classe::Fonction(TheStructure &ptr)
et Fonction(truc);
Marsh Posté le 28-08-2002 à 16:30:10
et si tu declarais ta structure str comme membre de ta classe, tu ne serais pas oblige de la passer en parametre, nan?
Marsh Posté le 28-08-2002 à 16:30:34
lorill a écrit a écrit : y'a le passage par référence... Mais je suis plus sur de la syntaxe. Ca doit donner un truc du genre void Classe::Fonction(TheStructure &ptr) et Fonction(truc); |
c ça
Marsh Posté le 28-08-2002 à 16:33:11
Ouaiz.
C le passage par référence ce à quoi tu penses...
Code :
|
Mais en cpp, les typedef struct ne devraient pas exister non plus. après tout, c que des ersatz de classe.
En fait, c comme un passage par pointeur, à 2 différencesz près :
- on s'encombre plus avec les ->
- on à pas à vérifier que la référence n'est pas nulle (ds ton cas, t'aurais du tester si ptr n'est pas null.
Marsh Posté le 28-08-2002 à 16:37:37
Les références ! C'est exactement ça !! Je ne les utilise jamais et c'est un tort !!
Citation : |
Je le teste, mais j'ai pas mis tout le code
Citation : |
C'était ma 1ere idée, jusqu'a ce que je me fasse taper sur les doigts, car notre charte exige qu'on utilise un minimum les variables membres... Pourquoi ? Je sais pas, mais c'est comme ça....
Citation : Mais en cpp, les typedef struct ne devraient pas exister non plus. après tout, c que des ersatz de classe. |
la encore, c'est la charte...
Merci à tous
Marsh Posté le 28-08-2002 à 16:39:07
bah eu a quoi ca sert une classe si tes instances n'ont pas d'état ?
Marsh Posté le 28-08-2002 à 16:40:28
lorill a écrit a écrit : bah eu a quoi ca sert une classe si tes instances n'ont pas d'état ? |
Va demander ça à l'ingénieur qui nous sert de chef de projet
Marsh Posté le 28-08-2002 à 23:54:00
tu mettes tes variables dans une struct
ca change quoi?
En C++ , struct = class que cela se sache!
LeGreg
Marsh Posté le 29-08-2002 à 11:18:06
Sinon, tu peux faire un truc du genre :
TheStructure *str; |
avec un malloc dans la fonction, et un destructeur quand on a fini d'utiliser la structure.
Marsh Posté le 29-08-2002 à 11:20:39
Jar Jar a écrit a écrit : Sinon, tu peux faire un truc du genre :
|
C'est une solution aussi.
Ayé, t'as ton boolay aussi ?
Marsh Posté le 29-08-2002 à 11:26:08
Harkonnen a écrit a écrit : Ayé, t'as ton boolay aussi ? |
Ouais, c'est une valeur sûre, celui-là
Marsh Posté le 29-08-2002 à 11:31:43
Jar Jar a écrit a écrit : Ouais, c'est une valeur sûre, celui-là |
Y'a Squiiid qui est dispo aussi, c du premier choix également !
Marsh Posté le 30-08-2002 à 03:06:27
Et si la structure avait une méthode pour être remplie ?
Je crois même qu'on l'apelle operator=(...).
Il me semble aussi que pour l'initialisation on fait un truc spécial: un constructeur.
Mais bon, moi, ce que j'en dis...
Marsh Posté le 30-08-2002 à 03:11:27
Harkonnen a écrit a écrit : Y'a Squiiid qui est dispo aussi, c du premier choix également ! |
Clairement, mais le choix de Jar Jar est quand même d'un niveau supérieur
Marsh Posté le 30-08-2002 à 08:48:56
musaran a écrit a écrit : Et si la structure avait une méthode pour être remplie ? Je crois même qu'on l'apelle operator=(...). Il me semble aussi que pour l'initialisation on fait un truc spécial: un constructeur. Mais bon, moi, ce que j'en dis... |
Oui, mais moi je fais selon ce qu'on me dit hein !
On a une charte bien précise, sur la manière de procéder, etc... Si tu crois que ça m'amuse de suivre des procédures à la con...
Marsh Posté le 30-08-2002 à 10:13:48
legreg a écrit a écrit : tu mettes tes variables dans une struct ca change quoi? En C++ , struct = class que cela se sache! LeGreg |
Exact : en C++, une struct est une classe dont la visibilité par défaut est publique et non privée.
Marsh Posté le 30-08-2002 à 10:25:23
ca peut a la rigueur s'imposer si le struct en question provient
d'une librairie C, et qu'il souhaite "wrapper" sa structure dans une classe..
Au fait, ta question c'est peut-etre ca:
si tu as une struct MaStruc str que tu souhaites copier dans str2 alors
Code :
|
ou
Code :
|
LeGreg
Marsh Posté le 30-08-2002 à 10:31:41
legreg a écrit a écrit : ca peut a la rigueur s'imposer si le struct en question provient d'une librairie C, et qu'il souhaite "wrapper" sa structure dans une classe.. Au fait, ta question c'est peut-etre ca: si tu as une struct MaStruc str que tu souhaites copier dans str2 alors
ou
|
Oui, mais dans ce cas, ça risque de m'obliger à créer un constructeur de copie non ?
Car celui par défaut risque de recopier les champs par valeur, et du coup tout changement dans str ne se répecutera pas dans str2
J'espere ne pas dire de conneries, car je suis vraiment dans le gaz ce matin !!!
Marsh Posté le 30-08-2002 à 10:40:41
Code :
|
Tu peux t'amuser a écrire un constructeur MaStruct -> MonWrapperClass (qui contient un objet MaStruct)
et aussi un operateur de conversion MonWrapperClass -> MaStruct.
Comme ca, tu pourras faire des affectations d'un type de variable vers l'autre.
Citation : Car celui par défaut risque de recopier les champs par valeur, et du coup tout changement dans str ne se répecutera pas dans str2 |
?? Ben oui quand tu as deux struct a deux adresses differentes
elles vivent leur vie séparément. Je ne vois pas comment en réecrivant le constructeur de copie tu pourras y changer quoi que ce soit. Si tu veux que ce soit le meme objet utilise une reference ou un pointeur.
Evidemment si tu veux faire du traitement lors d'une recopie d'objet ou ne pas recopier tous les champs tels quels, il faudra bien entendu ecrire un operateur de copie.. Mais, ce sera celui du wrapper class puisque tu n'as apparemment pas le droit de toucher a ton struct.
LeGreg
Marsh Posté le 01-09-2002 à 00:21:17
legreg a écrit a écrit : ca peut a la rigueur s'imposer si le struct en question provient d'une librairie C, et qu'il souhaite "wrapper" sa structure dans une classe.. |
Dans ce cas, il suffit de dériver de cette struct et d'implémenter les constructeurs, opérateurs de copie... en terme des fonctions C si on veut.
Tout cast sur une struct de base donne l'adresse d'une struct de base 100% conforme.
Code :
|
On peut même s'amuser à faire du code double face C/C++ avec des #ifdef _cplusplus.
Marsh Posté le 01-09-2002 à 15:29:11
musaran > ta solution est assez sympa, mais elle ne peut s'appliquer qu'a une structure, et non une classe (sans méthodes j'entends).
Comment gèrerais tu ce cas (en MFC, CString = chaine de caract) :
1 - une classe A possède une *CString en donnée membre (CString *test);
2 - dans le constructeur de ma classe A, j'initialise ce pointeur (test = NULL);
3 - je transmets ce pointeur à une méthode d'une classe B afin qu'il m'initialise la CString sur laquelle pointe ce pointeur (B.FillString(test))
Comment implémenterais tu B.FillString() ?
Marsh Posté le 01-09-2002 à 15:37:04
Harkonnen a écrit a écrit : musaran > ta solution est assez sympa, mais elle ne peut s'appliquer qu'a une structure, et non une classe (sans méthodes j'entends). Comment gèrerais tu ce cas (en MFC, CString = chaine de caract) : 1 - une classe A possède une *CString en donnée membre (CString *test); 2 - dans le constructeur de ma classe A, j'initialise ce pointeur (test = NULL); 3 - je transmets ce pointeur à une méthode d'une classe B afin qu'il m'initialise la CString sur laquelle pointe ce pointeur (B.FillString(test)) Comment implémenterais tu B.FillString() ? |
C'est vraiment n'importe quoi.
Ca viole les règles de bases de conception objet d'encapsulation.
Marsh Posté le 01-09-2002 à 15:49:21
Verdoux a écrit a écrit : C'est vraiment n'importe quoi. Ca viole les règles de bases de conception objet d'encapsulation. |
Je suis bien d'accord avec toi, pourtant j'ai bossé pour une boite qui ne travaillait que comme ça....
Marsh Posté le 02-09-2002 à 07:22:05
Quand je faisais des MFC, j'en ai très couramment dérivé les struct pour ajouter des constructeurs et éviter les oublis malencontreux.
Pour ta question, si j'ai bien suivi:
Code :
|
Mais dis-moi, B n'est-elle pas une classe allocatrice ?
c-a-d chargée de choisir ou en mémoire sont placés les éléments dynamiques ?
Ça expliquerait une partie de la bizarrerie de la chose.
Marsh Posté le 28-08-2002 à 16:25:28
Une petite question : je dois écrire une fonction, qui me renverra un pointeur vers une structure qui sera remplie dans le corps de cette fonction.
Je fais comme ceci :
Je suis persuadé avoir appris que le C++ permettait d'effectuer ceci d'une autre manière que celle que j'ai implémenté, qui reste quelque part du C "tout con". Mais j'ai comme un trou...
Quelqu'un a t'il plus de mémoire que moi ?
---------------
J'ai un string dans l'array (Paris Hilton)