begin process at 2012 05 28 23:31:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

la creation d'objets en c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

la creation d'objets en c++

mercredi 10 août 2005 à 14:56:11 | la creation d'objets en c++

whikie

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 <iostream>

using namespace std;
 enum eCouleur{pique,coeur,carreau,trefle};
           
class Cartes
{
      public:
             Cartes();
             ~Cartes();
             eCouleur Culeur;
             int Valeur;
             Cartes *pSuivante;
             void afficheCarte(Cartes param);
      };

Cartes::~Cartes()
{
                 cout <<"bye bye";
                 //system ("pause");
               }
void Cartes::afficheCarte(Cartes param)
{cout<<"compris"<<param.Culeur;
}

Cartes::Cartes()
{
 pSuivante=0;
 Culeur=coeur;
 Valeur=0;
}
int main()
{
    int couleur=0,valeur=0,compt=0;
   
    Cartes test[52];
   
    cout<<"Couleur de la premiere carte :"<<test[0].Culeur<<"\n";
   
    test[0].afficheCarte(test[0]);
    cout<<"fin de test";
    cout<<test[0].pSuivante<<"\n";
    for (couleur=0;couleur<4;++couleur)
     for (valeur=1;valeur<14;++valeur)
        {cout<<&test[compt]<<" adresse de test\n"<<"b="<<compt<<"\n";
         test[compt].Culeur=eCouleur(couleur);
         test[compt].Valeur=valeur;
         cout <<" ATTENTION ICI compt= :"<<(compt-1)<<"\n";
         test[compt-1].pSuivante=&test[compt];
         compt++;
         cout<<"compt ="<<compt<<" Couleur ="<<couleur<<"Valeur ="<<valeur<<"\n";
           system ("pause");
 
         }

    test[1].pSuivante= &test[0];
    cout<<test[1].Culeur<<"\n";
    cout<<test[1].pSuivante<<" adresse de la carte precedente\n";
   
    system("pause");
    return 0;
}
je suis sous Xp et avec DevCpp 4.9.9.2

Merci d'avance

mercredi 10 août 2005 à 15:02:48 | Re : la creation d'objets en c++

buno

Administrateur CodeS-SourceS
Réponse acceptée !
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...
mercredi 10 août 2005 à 15:17:04 | Re : la creation d'objets en c++

whikie

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

mercredi 10 août 2005 à 15:20:17 | Re : la creation d'objets en c++

steve_clamage

Réponse acceptée !
"Je croyais que le fait de declarer Cartes test[52] me creait 52 objets cartes"

c'est vrai, et pour affiche :

void Cartes::afficheCarte()
{cout<<"compris"<<Culeur;
}
mercredi 10 août 2005 à 15:30:04 | Re : la creation d'objets en c++

buno

Administrateur CodeS-SourceS
Réponse acceptée !
Désolé si je me suis mal fait comprendre pour le coup du destructeur.

En fait, voilà:

void afficherCartes()
{
  Cartes temp;  // création d'un objet carte, local à la fonction

 /* blabla */
} // ici, les objets locaux sont détruits: appel au destructeur de temp

Il vaut mieux faire ta fonction sur l'exemple de steve_clamage car, a priori, tu n'as pas besoin d'un objet Carte local...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 10 août 2005 à 15:34:18 | Re : la creation d'objets en c++

whikie

oki merci beaucoup

Mais alors comment je fais pour etre sur d'acceder a mes objets dans un tableau d'objets ?

Pour moi le fait de declarer Cartes test[52] je cree 52 cartes qui vont de test[0] a test[51] et en aucun cas je declare test[-1].

Si test[-1] n'est pas declaré je ne devrais pas pouvoir y acceder non ?


mercredi 10 août 2005 à 15:59:06 | Re : la creation d'objets en c++

buno

Administrateur CodeS-SourceS
Réponse acceptée !
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...
mercredi 10 août 2005 à 16:09:14 | Re : la creation d'objets en c++

whikie

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 ...

A bientot

mercredi 10 août 2005 à 16:14:36 | Re : la creation d'objets en c++

steve_clamage

Réponse acceptée !
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.


Cette discussion est classée dans : valeur, test, cout, cartes, compt


Répondre à ce message

Sujets en rapport avec ce message

monObjet test = valeur; <- Comment faire svp ? [ par Bub325 ] je cherche donner une valeur à mon objet dès l'initialisation, car operato= ne marche que après. donc comment faire svp ?Merci beaucoup pour vos répon CcomboBox valeur par defaut [ par shaolinn ] hello Comment fait ton pour mettre une valeur par defaut dans une combobox au moment de l'affichageCCombobox test ;et apres c qu'elle methode?test.??? entrer une valeur ou appuyer sur Enter pour celle par defaut [ par bastet1978 ] Bonjour voila je dois recuperer des valeurs ou les definir si l'utilsateur tappes sur Enter. J'ai 3 questions donc trois boucles demandant trois vale Problème de concaténation ( débutant :p ) [ par t0ine ] Voila je voudrais concaténer des chars ==> voir plus bas . J'aimerais qu'au palindromeD se rajoute tout ce k'il y a dans la PalindromM , etc .... Si q DevCpp capricieux ? bug étrange... [ par nollyflip ] Bonjour,J'ai un comportement étrange (et pour le moins énervant) de dev cpp, je me dis que ce bug est peut-être connu et résolu. J'ai la 4.9.9.2 (dern urgent svp exo sur les tableaux [ par blastmanu ] bonjour tt le monde voila mon probleme:Soit un tableau Tab1 de taille maxi Tmax=35 On veut:-Remplir Tab1 en demandant les valeur a l'utilisateur. Le n besoin d'aide [ par zhao77 ] Bonjour a tous ,voila j'ai un probleme que je n'arive pas a resoudre prenons ce bout de programme :fichier = fopen ("/sauvegarde/test.txt", "a+") ;if Client(c++Builder)/Serveur(linux) [ par willixs ] Bonjour j'ai fait un socket client sur c++ builder et un serveur socket sur linux mais j'ai un probleme c'est que j'ai créé un tableau de caractères s Appler une structure dans une fonction ... [ par eldered ] Salut !!Alors mon pb est le suivant :J'ai cré une fonction qui me permet un certain nombre de chose en autre trouver si un element appartient a un tab Probleme avec If et else [ par violatorstrain2 ] Bonjours a tous voici un bout de code d'un convertisseur hexadecimal, octal, et decimal :#include<font color="#a


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales