Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1345 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  référent pointeurs alias

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

référent pointeurs alias

n°955960
fullnight
Posté le 18-01-2005 à 23:36:20  profilanswer
 

salut a tous !
 
 
alors voila j'avais besoin de tester un petit truc !(deux pointeurs pointant un même objet)
 
avec dans un premier temps ce code ci qui marche sans erreur a l'exécution ( VC++ 6.0 )
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class CSociete
  4. {
  5. public:
  6. CSociete(){;};
  7. virtual ~CSociete(){cout<<"destruction"<<endl;}; 
  8. };
  9. void main()
  10. {
  11. // 2 manières de créer un objet
  12. CSociete *ptrSociete=new CSociete();
  13. CSociete Societe;
  14. ptrSociete->~CSociete();    // affichage du mot destruction  
  15. system("PAUSE" );
  16. }    // affichage du mot destruction une 2 eme fois


 
 
ok jusque la ca va
 
 
et puis dans un deuxième temps  
ce code ci ..... il me fait une erreur à l'exécution ( VC++ 6.0 )
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class CSociete
  4. {
  5. public:
  6. CSociete(){;};
  7. virtual ~CSociete(){cout<<"destruction"<<endl;}; 
  8. };
  9. void main()
  10. {
  11. CSociete *ptrSociete=new CSociete();
  12. CSociete Societe;
  13. CSociete *ptr = NULL;
  14. ptr->~CSociete();
  15. system("PAUSE" );
  16. }


 
 
mais qu'est ce qui ne va pas ?  A quoi n'ai je pas fait attention.
 
dites le moi clairement s'il vous plait.


Message édité par fullnight le 19-01-2005 à 22:41:02
mood
Publicité
Posté le 18-01-2005 à 23:36:20  profilanswer
 

n°955963
KangOl
Profil : pointeur
Posté le 18-01-2005 à 23:40:44  profilanswer
 

Code :
  1. # CSociete *ptr = NULL;
  2. # ptr->~CSociete();


 
 :sarcastic:


---------------
Nos estans firs di nosse pitite patreye...
n°955966
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-01-2005 à 23:51:32  profilanswer
 

[:daplopbot]


---------------
J'ai un string dans l'array (Paris Hilton)
n°955967
PtitKiki
Le Vrai
Posté le 18-01-2005 à 23:53:59  profilanswer
 

en principe il est interdit d appeler explicitement le destructuer via ~TaClasse().
Utilise plutot "delete"
Si ton pointeur est NULL (comme ici) il est normal que l'appel à ~TaClasse() plante...  
delete ne plantera pas si ton pointeur est nul.


Message édité par PtitKiki le 18-01-2005 à 23:54:47
n°955985
fullnight
Posté le 19-01-2005 à 00:35:20  profilanswer
 

PtitKiki a écrit :

en principe il est interdit d appeler explicitement le destructuer via ~TaClasse().
Utilise plutot "delete"
Si ton pointeur est NULL (comme ici) il est normal que l'appel à ~TaClasse() plante...  
delete ne plantera pas si ton pointeur est nul.


 
 
j'aimerais que ptr puisse pointer mon objet Societe.
est-ce comme ceci?
 
CSociete *ptr=Societe ;  
 
ou comme ceci?
 
CSociete *ptr=ptrSociete;
 
 
 
????
 
puis mes 2 objets ici en dessous
 
CSociete *ptrSociete=new CSociete();  
CSociete Societe;
 
et mon pointeur  
 
CSociete *ptr;
 
faut que ptr puisse pointer ce que pointe ptrSociete ou qu'il pointe Societe.
 
 
ceci fonctionne ptr->~CSociete(); en tout cas.

mon but est d'avoir 2 référents pour un objet pour les 2 manieres de création d'objet
 
c'est vraiment ca le principal
donc on fait ca comment svp? please ne me pointez pas..


Message édité par fullnight le 19-01-2005 à 02:51:19
n°955989
Taz
bisounours-codeur
Posté le 19-01-2005 à 00:48:02  profilanswer
 

ça va pas la tête d'appeler le destructeur explicitement !

n°955990
fullnight
Posté le 19-01-2005 à 00:49:49  profilanswer
 

et pourtant ca marche tranquillement ! sans aucune erreur m'enfin
il parait que ca fait des "trous non réutilisables" fragmentation dans la RAM en c++
 
et que java lui par contre "défragmente la ram".


Message édité par fullnight le 19-01-2005 à 02:52:40
n°955992
KangOl
Profil : pointeur
Posté le 19-01-2005 à 00:53:32  profilanswer
 

c'est sur qu'en codant ainsi, tu vas pas te faire beaucoup d'amis...


---------------
Nos estans firs di nosse pitite patreye...
n°955993
fullnight
Posté le 19-01-2005 à 00:54:09  profilanswer
 

mon but est d'avoir 2 référents pour un objet pour les 2 manieres de création d'objet
 
c'est vraiment ca le principal
donc on fait ca comment svp?
 
 
bon dans un diagramme de séquence on peut mettre fin à la vie d'un objet explicitement en y faisant une belle croix sur sa ligne de vie
 
alors bon


Message édité par fullnight le 19-01-2005 à 02:53:49
n°955995
KangOl
Profil : pointeur
Posté le 19-01-2005 à 00:56:20  profilanswer
 

on joue pas avec les pointeurs si on sait pas ce que c'est :pfff:


---------------
Nos estans firs di nosse pitite patreye...
mood
Publicité
Posté le 19-01-2005 à 00:56:20  profilanswer
 

n°955996
fullnight
Posté le 19-01-2005 à 00:58:32  profilanswer
 

bah je sais ce que c'est
 
c'est une variable qui recoit une adresse ...
 
et après quoi?? keskil reste a savoir pour "jouer avec" comme tu dis?
 
 
je sais très bien qu'il faut faire un delete plutot qu'un appel au destructeur !!
mais rho c'est pas pour ca que je suis venu poster un sujet !
 
faut savoir que je ne voulais pas détruire l'objet! j'ai pris le destructeur paske c'était la seule "chose" que je pouvais encore prendre pour tester mon pointeur.
En fait étant donné que je ne pouvais plus appeller le constructeur
et que j'avais la flegme de taper une autre fonction il restait devant mes yeux uniquement le destructeur a employer !pour tester si mon pointeur pointait bien l'objet que je voulais lui faire pointer !!
 
mais je le répete meme si j'ai fait une grosse bétise en appellant le destructeur a l'aide d'un pointeur
 
mon but était d'avoir deux référents pour un objet créé dynamiquement et 2 référents pour un objet créé statiquement.
 
voila !!


Message édité par fullnight le 19-01-2005 à 02:54:31
n°955998
KangOl
Profil : pointeur
Posté le 19-01-2005 à 01:02:07  profilanswer
 

bon bin alors ?
avec un peu de jujote, tu dois trouver tout seul :o


---------------
Nos estans firs di nosse pitite patreye...
n°956002
fullnight
Posté le 19-01-2005 à 01:07:53  profilanswer
 

donc
 
CSociete Societe;
CSociete *ptr;
 
ici Societe est un objet on est ok jusque la
ensuite le mot Societe c'est un référent
jusque la on est toujours ok
 
maintenant on sait tous qu'un référent c'est un pointeur !
 
donc ca fait DEJA un pointeur nommé Societe qui pointe vers une zone mémoire ou est stocké l'objet.
 
 
alors justement si on est d'accord jusque la
 
comment faire pour que *ptr      puisse pointer la meme chose que ce que pointe le pointeur qu'est Societe??
 
doit on faire *ptr=Societe ou bien *ptr= &Societe?
 
je ne comprend pas pourquoi on peut faire Societe.fonction()  
et  que l'on peut tout aussi bien faire ptrSociete->fonction()
 
qu'est ce qui change a part l'appel?


Message édité par fullnight le 19-01-2005 à 02:57:05
n°956003
KangOl
Profil : pointeur
Posté le 19-01-2005 à 01:12:09  profilanswer
 

[:daplopbot]
 
toi t'as pas écouté au cours...
 
 
 
PS : Taz, regarde pas ca, sinon tu vas faire une attaque...


---------------
Nos estans firs di nosse pitite patreye...
n°956004
fullnight
Posté le 19-01-2005 à 01:13:33  profilanswer
 

en fait je crois que je confond....
 
quand on passe un objet a une fonction
 
pas besoin de mettre un & devant car c'est déja une adresse parait il..
 
d'après le scriboutchi que j'ai écrit en classe..
 
alors je me dis que si c'est une adresse et bien donc le *ptr  est capable d'accepter Societe  sans que je mette & devant
 
nan???
 
si je ne me goure pas CSociete *ptrSociete=new CSociete();  nous crée un pointeur nommé ptrSociete vers un objet sans nom stocké en mémoire ..
 
par contre CSociete Societe; nous crée un objet mémoire nommé Societe et il n'y a aucun pointeur et la je dis bravo c++  ??
je reve puisqu'on sait dire Societe.fonction()     en quel honneur le peut on???????????
 
mais qu'est ce qu'un référent ??
 
quel est le référent de Societe??
 
Societe?????????????
 
je ne pige pas quel est le référent dans  CSociete *ptrSociete=new CSociete();
 
serait-ce  *ptrSociete?
 
ca n'a aucun sens
quel est l'intéret d'un dynamique par rapport a un statique  :sweat:  ah la la je pige pas trop..
 
 
allez me critiquez pas et dites moi comment ca doit etre


Message édité par fullnight le 19-01-2005 à 03:41:05
n°956007
Taz
bisounours-codeur
Posté le 19-01-2005 à 01:30:28  profilanswer
 

bon, je fais clair:
- pour chaque new, 1 et 1 seul delete
- pour chaque new[], 1 et 1 seul delete[]
- n'appelle jamais le destructeur toi même. Si ton object est alloué automatiquement, t'as rien à faire. Si c'est un objet alloué dynamiquement, delete le (delete[] les)
- arrête ta cuisine, ça sert à rien. Réfléchis au niveau des type. Qui est un T, qui un T*, quel est le type de l'expression. Sinon, tu peux passer ta vie à rajouter/enlever des & / *
- c'est quoi ce délire sur le nom des objets ?
- un référant ? jamais entendu ce terme.

n°956009
fullnight
Posté le 19-01-2005 à 01:41:00  profilanswer
 

un référent... m'enfin ca vient d'un livre .. lol
 
merde c'est pas vrai vous voyez pas??
 
pourtant c'est tout ce que je veux savoir depuis le début..
 
et un alias ca vous dit rien??
bah c'est des termes UML  
va voir sur ce lien ce qu'est un référent et un alias
http://c.developpez.com/faq/cpp/?p [...] _reference
bein je vais faire un truc en mspaint alors...
 
http://www.membres.lycos.fr/zonefullnight/hehe.JPG


Message édité par fullnight le 19-01-2005 à 03:40:30
n°956010
fullnight
Posté le 19-01-2005 à 01:46:07  profilanswer
 

je cite :
 
"plusieurs réferents pour un même objet"
 
un meme objet peut il porter plusieurs noms? plusieurs referents qui contiennent tous la meme adresse pghysique peuvent ils designer en memoire un seul et meme objet??
 
OUI, s'il est nécessaire de nommer, donc d'accéder a l'objet , dans des contextes différents et qui s'ignorent mutuellement.
 
adressage indirect.
 
C'est la possibilité pour une variable non pas d'etre associée directement a une donnée mais plutot a une adresse physique d'un emplacement contenant,lui,cette donnée.IL devient possible de différer le choix de cette adresse pendant l'excution du programme totu en utilisant naturellement la variable.
et plusieurs de ces variables peuvent alorsp ointer vers un meme epmplacement. une telle variable est dénommée un pointeur en c et c++
 
dans le cours de l'écriture d'un programme orienté objet on accédera couramment a un meme objet par plusieurs referents générés dans différents contextes d'utilisation

n°956011
fullnight
Posté le 19-01-2005 à 01:47:20  profilanswer
 

donc merci pour le cours sur le delete  :jap: mais bon je sais deja tout ca  :kaola:  
 
 moi ce qui m'intéresse c'est de faire pointer 2 pointeurs vers un seul objet :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  
 
comment fait on en c++ svp :sarcastic: ??


Message édité par fullnight le 19-01-2005 à 21:54:22
n°956022
docmaboul
Posté le 19-01-2005 à 05:28:58  profilanswer
 

fullnight a écrit :

un référent... m'enfin ca vient d'un livre .. lol
 
merde c'est pas vrai vous voyez pas??


 
Ben, référent est plus un terme de linguistique de base que de programmation aussi...

n°956074
masklinn
í dag viðrar vel til loftárása
Posté le 19-01-2005 à 09:09:39  profilanswer
 

fullnight a écrit :

moi ce qui m'intéresse c'est de faire pointer 2 pointeurs vers un seul objet :bounce:  :bounce:  :bounce:  :bounce:  :bounce:


...
 
abc -> objet
*abc -> ce vers quoi pointe l'objet
&abo -> adresse (en mémoire) de l'objet
 
un pointeur, c'est un objet (élément, pas nécessairement objet au sens POO) stockant l'adresse (en mémoire) d'un autre objet, donc on a abc -> adresse de l'objet et *abc -> objet.
 
Ben pour avoir deux pointeurs sur un même objet il suffit que les deux pointeurs stockent la même adresse [:spamafote]  
 
Par contre comme le dit Taz, un seul delete par new, donc pour chaque objet créé via new, un seul delete, quel que soit le nombre de pointeurs que tu colles dessus


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°956880
fullnight
Posté le 19-01-2005 à 21:13:32  profilanswer
 

int x=1;
x est un référent  
 
int *ptrY=&x;  
 
Y est un alias.
 
un pointeur ou un alias c'est très lié je dirais que c pareil
 
 
 
quand on fait l'instanciation CSociete Societe;
 
Societe est donc un référent .
 
g pigé :-)
 
alors la c cool


Message édité par fullnight le 19-01-2005 à 21:19:35
n°956883
fullnight
Posté le 19-01-2005 à 21:17:17  profilanswer
 

CSociete *ptrDeSociete= & Societe ;
CSociete *ptr2DeSociete= & Societe ;
 
ah voila :)


Message édité par fullnight le 19-01-2005 à 21:20:52
n°956890
KangOl
Profil : pointeur
Posté le 19-01-2005 à 21:26:26  profilanswer
 

fullnight a écrit :

int x=1;
x est un référent  


non !!!
 
x est appellé référent uniquement dans une fonction (ou méthode) a laquel tu aurais passé une référence à x en parametre :o


---------------
Nos estans firs di nosse pitite patreye...
n°956892
Taz
bisounours-codeur
Posté le 19-01-2005 à 21:27:35  profilanswer
 

fullnight a écrit :

CSociete *ptrDeSociete= & Societe ;
CSociete *ptr2DeSociete= & Societe ;
 
ah voila :)


t'en as pas marre sérieux ?
 
et ton histoire de référent, tu te le mets profonds. En C++, y a des valeurs et des références, rien d'autres.

n°956918
fullnight
Posté le 19-01-2005 à 21:43:06  profilanswer
 

y'a un truc que je pige pas...
 
avec visual c++ 6.0
 
je fais ca
 
CSociete *ptrSociete=new CSociete();  
ptrSociete=NULL;
 
ensuite ptrSociete->fonction_de_l_objet();    est toujours possible a faire :| :| :|
 
 
 
entre nous taz je sais pas pourquoi t'es toujours sec comme ca faudrait te calmer un coup.
y'a pas que toi qui peut etre agressif!
C'est pas un accueil ca


Message édité par fullnight le 19-01-2005 à 21:48:53
n°956924
++fab
victime du syndrome IH
Posté le 19-01-2005 à 21:46:13  profilanswer
 

ça fait boum à l'execution. A part ça, tout va bien !

n°956927
fullnight
Posté le 19-01-2005 à 21:46:53  profilanswer
 

non à l'exécution ca fonctionne
jviens d'essayer


Message édité par fullnight le 19-01-2005 à 21:47:09
n°956934
++fab
victime du syndrome IH
Posté le 19-01-2005 à 21:50:32  profilanswer
 

tu déréférences un pointeur nul, t'as pas vu le crash alors !

n°956937
KangOl
Profil : pointeur
Posté le 19-01-2005 à 21:52:48  profilanswer
 

fullnight a écrit :

y'a un truc que je pige pas...
 
avec visual c++ 6.0
 
je fais ca
 
CSociete *ptrSociete=new CSociete();  
ptrSociete=NULL;
 
ensuite ptrSociete->fonction_de_l_objet();    est toujours possible a faire :| :| :|


 
 :cry:  :cry:  


---------------
Nos estans firs di nosse pitite patreye...
n°956945
fullnight
Posté le 19-01-2005 à 21:57:17  profilanswer
 

bah je sais bien que ca se fait pas
mais faudrait penser a descendre de votre pied d'estalle les gars...
 
non mais ho...
 
Je teste et ho par hasard je vois que y'a encore moyen !
 
ca n'a aucun sens de faire ca je sais !!
 
mais bon je m'apercois que ca marche encore  
trop fort
moi je dis bravo
 
faut un print screen peut etre?


Message édité par fullnight le 19-01-2005 à 21:59:41
n°956954
masklinn
í dag viðrar vel til loftárása
Posté le 19-01-2005 à 22:00:40  profilanswer
 

fullnight a écrit :

mais bon je m'apercois que ca marche encore  
trop fort
moi je dis bravo
 
faut un print screen peut etre?


Non ça marche pas, tu vois pas que ça plante, nuance


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°956962
fullnight
Posté le 19-01-2005 à 22:04:53  profilanswer
 

faut un print screen peut etre?
 
 
tu m'en diras des nouvelles et des nuances...
http://membres.lycos.fr/zonefullnight/hehe.JPG&#034;

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class CSociete
  4. {
  5. public:
  6. CSociete(){;};
  7.     CSociete(const CSociete & ){;};
  8. void fuck(){cout<<"test"<<endl;};
  9. virtual ~CSociete(){cout<<"destruction"<<endl;}; 
  10. };
  11. void main()
  12. {
  13. CSociete *ptrSociete=new CSociete();
  14. CSociete Societe;
  15. int x=1;
  16. int *y=&x;
  17. cout<<"adresse de x "<<y<<endl;
  18. cout<<"adresse de x "<<&x<<endl;
  19. CSociete *ptr=&Societe; // &Societe c'est l'adresse de l'objet nommé société. Societe est un référent!
  20. cout<<"adresse de Societe "<<ptr<<endl;
  21. ptr->fuck();
  22. cout<<"adresse de ptrSociete "<<ptrSociete<<endl;
  23. ptr=ptrSociete; // est ce que ptr pointe L AUTRE objet ??  OUI
  24. cout<<"adresse de ptr "<<ptr<<endl;
  25. ptrSociete=NULL;
  26. cout<<"adresse de ptrSociete "<<ptrSociete<<endl;
  27. ptrSociete->fuck();
  28. system("PAUSE" );
  29. }


 
ptrSociete=NULL;  
         ptrSociete->fuck();

 
ca c'est fort


Message édité par fullnight le 19-01-2005 à 22:10:44
n°956970
masklinn
í dag viðrar vel til loftárása
Posté le 19-01-2005 à 22:16:12  profilanswer
 

[:itm]  
 
teste donc

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class CSociete
  4. {
  5.     int ffs;
  6. public:
  7. CSociete():ffs(15) {};
  8.     CSociete(const CSociete & ) {};
  9. void fuck(){cout<<"test"<<endl;};
  10. void idiot() {cout << ffs << endl;};
  11. virtual ~CSociete(){cout<<"destruction"<<endl;}; 
  12. };
  13. int main(int argc, char ** argv)
  14. {
  15.     CSociete *ptrSociete=new CSociete();
  16.     CSociete Societe;
  17.    
  18.     CSociete *ptr=&Societe;
  19.    
  20.     ptr->fuck();
  21.    
  22.     ptr=ptrSociete;
  23.    
  24.     cout << "Test v1" << endl;
  25.     ptrSociete->fuck();
  26.     ptrSociete->idiot();
  27.    
  28.     ptrSociete=NULL;
  29.    
  30.    
  31.     cout << "Test objet v1" << endl;
  32.     ptrSociete->fuck();
  33.     cout << "Test objet v2" << endl;
  34.     ptrSociete->idiot();
  35. }


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°956973
Lam's
Profil: bas.
Posté le 19-01-2005 à 22:22:50  profilanswer
 

Ca boum uniquement si la méthode est virtuelle ou qu'elle utilise un membre de la classe.  
 
C'est d'ailleurs pour ça que son tout premier bout de code plantait: le destructeur était virtuel... :o

n°956976
docmaboul
Posté le 19-01-2005 à 22:28:42  profilanswer
 

et sinon, on peut faire la fête à coups de if ( this == NULL )  :love: :love: :love:

n°956977
fullnight
Posté le 19-01-2005 à 22:28:49  profilanswer
 

effectivement ca ne va pas( dans ton cas )
dans le mien ca allait !
 
au fait regarde l'image suivant et explique moi pq on peut tj sélecter ce qu'on veut de l'objet..
sacré microsoft
 
http://membres.lycos.fr/zonefullnight/skimetonne.JPG

n°956979
fullnight
Posté le 19-01-2005 à 22:32:29  profilanswer
 

merci lam's ta réponse est claire et correcte :)


Message édité par fullnight le 19-01-2005 à 22:32:37
n°956983
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-01-2005 à 22:34:05  profilanswer
 

fullnight a écrit :

effectivement ca ne va pas( dans ton cas )
dans le mien ca allait !
 
au fait regarde l'image suivant et explique moi pq on peut tj sélecter ce qu'on veut de l'objet..
sacré microsoft
 
http://membres.lycos.fr/zonefullnight/skimetonne.JPG


non mais alors toi t'es complètement à la masse hein [:mlc]
le fait que tu puisses "selecter" ce que tu veux n'a rien à voir avec Microsoft, c'est juste que l'IDE se base sur la déclaration de la classe pour te proposer ses méthodes et variables membres....
faudrait voir à arréter de dire des conneries maintenant hein, sinon je ferme ton topic


---------------
J'ai un string dans l'array (Paris Hilton)
n°956989
fullnight
Posté le 19-01-2005 à 22:38:52  profilanswer
 

a ce point la? lol on dirait que tu bosses pour microsoft
 
bah ferme le topic alors car j'ai obtenu ske je voulais

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
  FORUM HardWare.fr
  Programmation
  C++

  référent pointeurs alias

 

Sujets relatifs
Enregistrer pointeurs et leurs contenus dans un fichierchaînes et pointeurs en ada
utilisation des pointeurs pour des matrices 2*2J'ai du mal avec les struct et les pointeurs ensemble !
Petit probleme de pointeurs sur des tableaux d'une structure[C]Pointeurs
Templates et pointeurs de fonctions membres?Question pointeurs
debug : evolution des pointeurs[java] ip alias en java ?
Plus de sujets relatifs à : référent pointeurs alias


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR