Besoin d'eclaircissement sur les classes et pointeurs
oliarn
Messages postés7Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention14 septembre 2004
-
14 nov. 2003 à 15:57
oliarn
Messages postés7Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention14 septembre 2004
-
16 nov. 2003 à 12:09
bonjour,
je fais un programme en c++ pour la fac e tj'aimerai savoir comment manipuler mes classes dans mon programmes.
voila une fonction par exemple message esst une classe qui contient un pointeur vers un message suivant pour chainee les messages. cette fonction doit permettre de lire le ieme message de cette liste .
int utilisateur :: lire(int numero, message* liste)
{
ptrmsg tmp;
int indice=1;
tmp = new message;
tmp=liste;
while(indice!=numero)
{
/* Gestion des errreurs, ex: le message que l'on souhaite effacer n'existe pas */
if (tmp==NULL)
{
return 0;
else {
/*on avance au prochain message et on incremente l'indice*/
tmp=tmp->suivant;
indice++;
}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 14 nov. 2003 à 16:08
l'objet message créé est inutile. De plus, comme tu réaffecte une nouvelle valeur à tmp juste après, l'adresse de l'objet créé est perdue et donc du ne pourras pas l'utiliser ni détruir l'objet.
tmp = new message;
tmp=liste;
ensuite, pour accéder aux champs de tmp, il faut utiliser -> (comme tu le fais dans le while) au niveau des cout
cout<<"expediteur:" ;
cout<<tmp->expediteur<<endl;
cout<<"sujet: ";
cout<<tmp->sujet<<endl;
cout<<"date: ";
cout<<tmp->date<<endl;
cout<<"texte: ";
cout<<tmp->texte<<endl;
oliarn
Messages postés7Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention14 septembre 2004 14 nov. 2003 à 16:11
donc le new et le delete ne serve a rien ?
en fait quand j'a iun pointeur de classe pour acceder a la valeur de ses arguments il faut que je fasse nom->argument ? je pensais que ca em renvoyais le pointeur vers l'argument.
autrement si je dis que tmp es tun message ca ne marcherait pas ?
oliarn
Messages postés7Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention14 septembre 2004 14 nov. 2003 à 16:19
je sais pas si t uauras le courage de lire ce code mais est ce que les pointeurs sont bien utilises et est ce la facon la plus simple de proceder ?
ptrutil charger_utilisateur(const char* fichier) { // fonction qui va nous servir a instancier
// une classe utilisateur a partir d'un fichier.
ptrutil util;
string mot;
ptrmsg tmp;
ifstream Entree("fichier") // on ouvre le fichier grace a un flux .
tmp=util->anc_mess; // on pointe tmp sur le debut
// de la liste des anciens messages.
Entree>>mot;
if ((mot!="$"))
{
cout << "fichier non valide (utilisateur)" << endl;
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 14 nov. 2003 à 23:29
Pour savoir si les pointeurs sont bien utilisés (syntaxiquement parlant) tu compile et tu regarde le résultat.
Si tmp est un poiteur sur un objet de type message et que tufait tmp.txt, tua auras une erreur de compilation.
Sinon, quant tu déclare un pointeur sur un objet, avant de l'utiliser, il FAUT l'initialiser. Pour cela 2 façon :
- A partir d'un objet déjà existant (début de liste par exemple)
- En créant un nouvel objet dynamiquement avec new.
C'est pour ca que dans le premier exemple le new est inutile car tu initialise tmp avec le début de la liste
Dans le deuxième exemple, le pointeur "util" est utilisé avant d'être initialisé.
Enfin, pour comparer des chaînes de caractères, c'est pas
if(mot != "$") mais if(strcmp(mot, "$") != 0)
Vous n’avez pas trouvé la réponse que vous recherchez ?