whikie
Messages postés99Date d'inscriptionvendredi 24 juin 2005StatutMembreDernière intervention17 septembre 2005
-
10 août 2005 à 14:56
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
10 août 2005 à 16:14
Bonjour a tous,
Je suis toujours en train d'apprendre les bases du c++, et la je me lance pour creer des objets.
Je voudrais creer des objets 'cartes a jouer'
je suis arrivé a creer ces objets mais je ne dois pas bien m'y prendre.
en effet j'ai fait un petit programme pour verifier et ...
deux surprises que je ne comprend pas si quelqu'un veut bien m'expliquer
1) quand je me sers de de la fonction 'afficheCartes' je passe par le destructeur ... ???
2) j'arrive a acceder a un objet pas crée ???
je m'explique j'ai cree 52 cartes : Cartes test[52] et j'arrive a la variable de la carte test[-1].Culeur sans planter le programme???
je ne sais pas si je suis bien clair ...
voici le code :
#include
using namespace std;
enum eCouleur{pique,coeur,carreau,trefle};
class Cartes
{
public:
Cartes();
~Cartes();
eCouleur Culeur;
int Valeur;
Cartes *pSuivante;
void afficheCarte(Cartes param);
};
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 10 août 2005 à 15:02
Si tu utilise un objet carte dans la fonction afficheCartes, il est normal que tu passe par le destructeur de cet objet en quittant la fonction.
Ensuite, le fait d'accéder à test[-1] est possible MAIS CE N'EST PAS UNE CARTE!!! En dehors de ton tableau, tu touche à la mémoire qui n'a, a priori, rien à voir avec tes cartes. Si tu tombe vraiment sur une carte, considère ça comme un coup de bol...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 10 août 2005 à 15:59
Explication:
- je déclare un tableau de 10 chiffres que j'initialise comme suit: 0,1,2,3,4,5,6,7,8,9
- en mémoire, j'ai ça:
a-b-c-0-1-2-3-4-5-6-7-8-9-d-e-f-g
Quand tu écris tab[i], tu essaie d'accéder en fait à la case mémoire d'adresse tab+i (tab étant l'adresse du 1er élément du tableau).
Donc:
tab[2] --> accès à la case d'adresse tab+2, contenu=2
tab[10] --> accès à la case d'adresse tab+10, contenu=d (ce n'est pas à toi)
Pour ne pas que cela arrive, il faut soit que tu sache exactement le nombre d'objets dans ton tableau, soit que tu sois capable de reconnaitre le dernier élément
C'est plus clair?
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Vous n’avez pas trouvé la réponse que vous recherchez ?
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 10 août 2005 à 16:14
Ca n'a rien a voir avec la force du typage, c'est le mode unsafe qui
permet de jouer avec les pointeurs, comme buno l'a expliqué, tab[2] est
juste un sucre syntaxique pour *(tab + 2), le compilateur ne pourra
jamais t'empecher de faire tab - 1.
whikie
Messages postés99Date d'inscriptionvendredi 24 juin 2005StatutMembreDernière intervention17 septembre 2005 10 août 2005 à 15:17
Salut,
Merci pour ta reponse rapide.
D'accord si je passe par une des fonctions de ma classe je passe obligatoirement par le destructeur ????
Ca me parait surprenant c'est quand meme moi qui doit decider a quel moment je veux detruire mon objet non ?
Je croyais que le fait de declarer Cartes test[52] me creait 52 objets cartes donc je n'ai pas encore compris la creation d'objets ( je m'en doutais )
je suppose que je dois passer par new mais je n'arrive a comprendre la syntaxe a utiliser pour creer un tableau de 52 cartes.
whikie
Messages postés99Date d'inscriptionvendredi 24 juin 2005StatutMembreDernière intervention17 septembre 2005 10 août 2005 à 16:09
oui merci encore
Ayant lu que le c++ etait 'fortement typé' je m'attendais a ce que le compilateur me surveille du coin de l'oeil et me previenne de mes etourderis mais je vois que c'est le contraire ...