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

  FORUM HardWare.fr
  Programmation
  C++

  [débutant C++] accès aux membres privés

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[débutant C++] accès aux membres privés

n°1376598
alain nial​a
Posté le 29-05-2006 à 12:42:30  profilanswer
 

Bonjour,
 
Je suis surpris qu'à l'exécution du code suivant :  
 
include <iostream>
using namespace std ;
using std::endl ;
 
struct CL {
     private :
              float z ;
      public :  
             float x ;
             
};
   
   main()
 
   {CL n; int k ;
   n.x=12 ; n.z=15 ;
   cout<<n.x<<endl ;
   cout<<n.z<<endl ;
   cin>>k ;
         }
 
il n'y ait pas de message d'erreur et qu'il s'affiche bien 12 et 15 alors que z est un membre privé de CL. On ne devrait normalement pas y avoir accès à partir du main().
Merci de votre aide !


Message édité par alain niala le 29-05-2006 à 12:54:05
mood
Publicité
Posté le 29-05-2006 à 12:42:30  profilanswer
 

n°1376633
boulax
Inserer phrase hype en anglais
Posté le 29-05-2006 à 13:14:54  profilanswer
 

t'as essayé en déclarant une classe plutot qu'une struct ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1376636
alain nial​a
Posté le 29-05-2006 à 13:19:07  profilanswer
 

oui j'ai essayé les deux ça ne change rien !

n°1376671
_darkalt3_
Proctopathe
Posté le 29-05-2006 à 14:01:18  profilanswer
 

tu utilises quel compilateur :??:
 
plusieurs choses en attendant:
- ca ne compile pas directement parce qu'il manque le '#' de l'include.
- ton "using std::endl", c'est n'importe quoi.
- utilises les balises de code.
- l'entete de main est fausse.
- ton code ne compile pas sous vc6, et c'est normal:

Code :
  1. --------------------Configuration: teststruct - Win32 Debug--------------------
  2. Compiling...
  3. main.cpp
  4. C:\Program Files\Microsoft Visual Studio\MyProjects\teststruct\main.cpp(16) : error C2248: 'z' : cannot access private member declared in class 'CL'
  5.         C:\Program Files\Microsoft Visual Studio\MyProjects\teststruct\main.cpp(7) : see declaration of 'z'
  6. C:\Program Files\Microsoft Visual Studio\MyProjects\teststruct\main.cpp(18) : error C2248: 'z' : cannot access private member declared in class 'CL'
  7.         C:\Program Files\Microsoft Visual Studio\MyProjects\teststruct\main.cpp(7) : see declaration of 'z'
  8. C:\Program Files\Microsoft Visual Studio\MyProjects\teststruct\main.cpp(20) : warning C4508: 'main' : function should return a value; 'void' return type assumed
  9. Error executing cl.exe.
  10. main.obj - 2 error(s), 1 warning(s)


Message édité par _darkalt3_ le 29-05-2006 à 14:01:35
n°1376676
skelter
Posté le 29-05-2006 à 14:05:58  profilanswer
 

Citation :

- ton "using std::endl", c'est n'importe quoi.


 
comment ca ?

n°1376686
_darkalt3_
Proctopathe
Posté le 29-05-2006 à 14:11:38  profilanswer
 

using std suffit


---------------
Töp of the plöp
n°1376694
skelter
Posté le 29-05-2006 à 14:19:18  profilanswer
 

ouai, enfin c'est pas n'importe quoi, juste inutile et surtout 'using std::' c'est toujours mieux que 'using namespace std'

n°1376697
_darkalt3_
Proctopathe
Posté le 29-05-2006 à 14:27:13  profilanswer
 

skelter a écrit :

ouai, enfin c'est pas n'importe quoi, juste inutile


Ca montre que le mec a pas compris ce qu'était un namespace.
 

skelter a écrit :

et surtout 'using std::' c'est toujours mieux que 'using namespace std'


Ah bon ?


---------------
Töp of the plöp
n°1376703
skelter
Posté le 29-05-2006 à 14:35:23  profilanswer
 


 
 
quand on a compris ce qu'est un namespace, on sait qu'il est preferable (dans l'ordre)
de ne jamais utiliser la directive using
d'utiliser la directive using en portee minimale
d'utiliser la directive using sur un nom explicite plutot que sur l'ensemble des noms d'un namespace
 
faire 'using namespace std' ca revient à mettre tout les noms presents dans le namespace std (dans la TU) dans le namespace global de la portee courante, faut en avoir conscience

Message cité 1 fois
Message édité par skelter le 29-05-2006 à 14:36:25
n°1376704
++fab
victime du syndrome IH
Posté le 29-05-2006 à 14:36:21  profilanswer
 

_darkalt3_ a écrit :

Ca montre que le mec a pas compris ce qu'était un namespace.


Peut-être que le mec en question a compris la différence entre using directive et using declaration ?
 
 
 

mood
Publicité
Posté le 29-05-2006 à 14:36:21  profilanswer
 

n°1376716
_darkalt3_
Proctopathe
Posté le 29-05-2006 à 14:48:30  profilanswer
 

skelter a écrit :

quand on a compris ce qu'est un namespace, on sait qu'il est preferable (dans l'ordre)
de ne jamais utiliser la directive using
d'utiliser la directive using en portee minimale
d'utiliser la directive using sur un nom explicite plutot que sur l'ensemble des noms d'un namespace
 
faire 'using namespace std' ca revient à mettre tout les noms presents dans le namespace std (dans la TU) dans le namespace global de la portee courante, faut en avoir conscience


 
en l'occurence, on a ici

Code :
  1. using namespace std ;
  2. using std::endl ;



---------------
Töp of the plöp
n°1376729
skelter
Posté le 29-05-2006 à 14:57:25  profilanswer
 

moi je vote pour 'using std::endl'

n°1376731
_darkalt3_
Proctopathe
Posté le 29-05-2006 à 15:00:23  profilanswer
 

pour moi, ca dépend surtout de savoir si on sait ce qu'on fait ou non [:spamafote]


---------------
Töp of the plöp
n°1376935
alain nial​a
Posté le 29-05-2006 à 18:54:54  profilanswer
 

Merci, ça vient donc du compilateur... J'utilise GCC 3.4.2. Pour l'histoire de namespace vous avez raison je ne sais pas ce que je fais, j'ai juste recopié l'en-tête dans un bouquin d'exercices de C++.

n°1376937
nasdak
Posté le 29-05-2006 à 18:58:55  profilanswer
 

ah ben bravo :o

n°1376949
alain nial​a
Posté le 29-05-2006 à 19:08:28  profilanswer
 

Bon j'ai décoché la case 'turn off all access checking' dans les options de compilation de dev-c++ et maintenant il compile plus... :)

n°1376996
++fab
victime du syndrome IH
Posté le 29-05-2006 à 20:50:37  profilanswer
 

Est-ce que tu peux la ligne de commande que crée dev-c++ pour invoquer g++ ? (dans les 2 cas)

n°1377084
_darkalt3_
Proctopathe
Posté le 29-05-2006 à 22:35:51  profilanswer
 

++fab a écrit :

Est-ce que tu peux poster la ligne de commande que crée dev-c++ pour invoquer g++ ? (dans les 2 cas)


 [:aloy]
[:dawa]


Message édité par _darkalt3_ le 29-05-2006 à 22:36:06

---------------
Töp of the plöp
n°1377871
++fab
victime du syndrome IH
Posté le 31-05-2006 à 00:01:35  profilanswer
 

up :o

n°1377876
skelter
Posté le 31-05-2006 à 00:18:20  profilanswer
 

option -fno-access-control
 
extrait du manuel de gcc

Citation :

-fno-access-control
           Turn off all access checking.  This switch is mainly useful for
           working around bugs in the access control code.

n°1377879
++fab
victime du syndrome IH
Posté le 31-05-2006 à 00:28:42  profilanswer
 

Je ne connaissais pas. Merci.


Message édité par ++fab le 31-05-2006 à 00:29:03
n°1377880
kadreg
profil: Utilisateur
Posté le 31-05-2006 à 00:32:18  profilanswer
 

alain niala a écrit :

Bon j'ai décoché la case 'turn off all access checking' dans les options de compilation de dev-c++ et maintenant il compile plus... :)


 
[:totoz] c'est quoi cette option du malin


Message édité par kadreg le 31-05-2006 à 00:32:26

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [débutant C++] accès aux membres privés

 

Sujets relatifs
[Débutant] Incrémeter une chaine unsigned charaide sur acces table access en vb
Récupération de l'adresse ip avec recvfrom() [Débutant]débutant en java script
[JAVA Débutant] KeyListerner sur JFrame OK, mais sur un JPanel ?[débutant][java]convertir html en xml
[débutant]convertir html en xml[JAVA Débutant] JPanel, JFrame et Paint() --> Help :(
debutant en .batquestions sur les Thread [Débutant]
Plus de sujets relatifs à : [débutant C++] accès aux membres privés


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