IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

un petit problème


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut un petit problème
    Bonjour, c'est ma première participation en vue que vous pourrez resoudre mon problème ..voila...je vouderais mettre en oeuvre un tableau d'objets "personne"
    seulement là....quand je sort de ma fonction "créer"...le contenu du tableau s'efface....j'ai essayé à l'interieur de la fonction le tableau contient ce que je lui ai entré....
    s'il vous plait si c'est un probleme de variable temporaire ....dites le moi et dites comment le contourner sans rendre la fonction amie

    le prog:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
     
    class Personne{
    	char *nom;
    	char *prenom;
    	unsigned int age;
     
    	public:
    	Personne();
    	Personne(char*,char*,unsigned int);
    	Personne(Personne&);
    	~Personne();
    	void affichage();
    	void modifier();
    	void clonage (Personne &);
    	Personne& operator=(Personne&);
    	int operator==(Personne&);
    	//friend void creer (Personne *tab,int n);
    	//friend void afficher (Personne *tab);
    	};
    	Personne::Personne(){
    		nom=NULL;
    		prenom=NULL;
    		age=0;
    	}
     
    	Personne::Personne(char *a,char *b,unsigned int c){
    		nom=new char[20];
    		strcpy(nom,a);
    		prenom=new char[20];
    		strcpy(prenom,b);
    		age=c;
    	}
     
    	Personne::~Personne(){
    		nom=NULL;
    		prenom=NULL;
    	}
     
    	void Personne::affichage(){
    		cout<<"\n------------------";
    		cout<<"\nLe nom "<<nom<<"\nLe prenom "<<prenom<<"\nL'age "<<age;
    		cout<<"\n------------------";
    	}
     
    	Personne::Personne(Personne&p){
    		clonage(p);
    	}
     
    	void Personne::modifier(){
    	int c;
    	char *chaine;
    	int age2;
    	cout<<"\nQuoi changer\n<1>. nom\n<2>. prenom\n<3>. age\n";
    	cin>>c;
    	switch(c){
    		case 1:cout<<"\nVeuillez entrer la nouvelle chaine...";
    				cin>>chaine;
    				strcpy(nom,chaine);
    				break;
    		case 2:cout<<"\nVeuillez entrer la nouvelle chaine ...";
    				cin>>chaine;
    				strcpy(prenom,chaine);
    				break;
    		case 3:cout<<"\nVeuillez entrer la nouvelle valeur ...";
    				cin>>age2;
    				age=age2;
    				break;
    	}
    	}
     
    	Personne& Personne::operator=(Personne& p){
    		if(this!=&p){
    			delete nom;
    			delete prenom;
    			nom=new char[20];
    			prenom=new char[20];
    			clonage(p);
     
    		}
    		return *this;
     
     
    	}
     
    	int Personne::operator==(Personne& p){
    		if(!strcmp(nom,p.nom) && !strcmp(prenom,p.prenom) && age==p.age) return 1;
    		return 0;
    	}
     
    	void Personne::clonage(Personne &p){
    	strcpy(prenom,p.prenom);
    	strcpy(nom,p.nom);
    	age=p.age;
    	}
     
    	void creer(Personne *tab,int n){
    		tab=new Personne[n];
    		char *chaine1=new char[20];
    		char *chaine2=new char[20];
    		int c;
    		for(int i=0;i<=n;i++)
    			{cout <<"\nNom :  ";cin>>chaine1;
    			cout <<"\nPrenom :  ";cin>>chaine2;
    			cout <<"\nAge :  ";cin>>c;
    			(*(tab+i))=Personne (chaine1,chaine2,c);
     
    			}
    			//tab[0].affichage();---->sa marche bien
    	}
     
     
    	void afficher(Personne *tab,int n){
    		for(int i=0;i<=n;i++){
    			(*(tab+i)).affichage();
    		}
    	}
     
     
    	void main(){
    	clrscr();
     
    		Personne p1("tow" , "tiw" , 20 );
    		Personne p2("gj,","hic",41);
    		p1.affichage();
    		p2.affichage();
    		p2.modifier();
    		p2.affichage();
    		p2=p1;
    		p2.affichage();
    		/*********************************************/
    		int n=2;
    		Personne *tab;
    		creer(tab,n);
    		(*tab).affichage();
    		//tab[0].affichage();---->sa ne donne rien :s
    		getch();
    		afficher(tab,n);
    		/*********************************************/
    		getch();
    	}

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Le problème c'est la portée de ton tableau. Il est créé à l'intérieur du bloc de ta méthode et est détruit à la fin de ce même bloc.
    Pour palier à sa tu peux le déclarer comme membre de ta fonction.

    Plusieurs remarques sur ton code :
    -pourquoi utiliser des tableaux de caractéres? String est là pour ça. Si tu ne connais pas je te laisse regarder la faq dans la partie SL
    -Pareil pour les tableaux de personne pourquoi ne pas utiliser plutôt un vecteur?
    -Ton opérateur d'affectation et ton constructeur par recopie ne sont pas cont-correct. Ni exception safe d'ailleurs.
    -Tu alloues de la mémoire que tu ne libères jamais (cf le destructeur)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    tré gran merci....je ne l'avais pas du tout remarqué :p ...pour les "probs" je vais les régler sympa de ta part ....quel idiot suis-je..je commence tout juste au c++..ya bcp de choses que je dois voir

Discussions similaires

  1. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo