Besoin d'aide pour un sujet en C++

snoozriton Messages postés 12 Date d'inscription jeudi 22 décembre 2011 Statut Membre Dernière intervention 12 novembre 2010 - 2 janv. 2010 à 16:50
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 - 10 avril 2012 à 10:37
Bonjour à tous,

je suis étudiant et j'ai un devoir à faire en C++. Mais j'avoue que je sèche lamentablement. Le devoir traite des pointeurs et des classes.
On doit créer un carnet d'adresses. Comme on est dans la partie Objets, on essaye de faire tout-objet.

J'ai créé une classe Informations contenant les informations d'un contact.
J'ai créé une classe Page est constitué d'un tableau de pointeurs sur des Informations.
J'ai créé une classe Carnet_adresses qui est constituée d'un tableau de 26 (pour les 26 lettres de l'alphabet) cases de type Page.
Mon souci est que je n'arrive pas et ne comprend pas vraiment comment faire pour agir sur les données de Page depuis Carnet_adresses pour ajouter des données.
Je ne suis pas sûr d'être très clair...

Voici une ébauche de code que j'ai pu faire :

#include
using namespace std;

class Information{
private:
string nom;
string prenom;
string adresse;
string tel;
public:
Information(string n="",string p="", string a="", string t="") {
nom=n;
prenom=p;
adresse=a;
tel=t;
}
};

class Page{
private:
Information * info[10];
public:

Page(string n="",string p="", string a="", string t=""){
int i;
for (i=0;i<10;i++){
*info[i]=Information(n,p,a,t);
}
}
void ajout(int i, string n="", string p="", string a="", string t=""){
*info[i]=Information(n,p,a,t);
}
};

class Carnet_adresses{
private:
Page index[26];
public:
Carnet_adresses(){
int i,j;
for (i=0;i<26;i++){
for (j=0;j<10;j++) {
index[i].*(info[j])=Page(); //bon, là y a du n'importe quoi justement. J'essaye lol
}
}
void init(){


};


Merci d'avance pour tout éclaircissement.

3 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
2 janv. 2010 à 22:01
Salut,

Pour commencer, je doute que ta ligne foireuse soit la seule qui foire.
*info[i]= Information(n,p,a,t); 

Ça marche, ça ? Un constructeur ne retourne rien, alors je ne vois pas comment tu peux affecter ce "rien" à une variable.
De plus, tu utilises les pointeurs, qui dit pointeur en C++ dit les opérateurs new et delete.

Je testerais donc :
Page(string n ="",string p="", string a="", string t=""){
    for (int i=0;i<10;i++){
        info[i]=new Information(n,p,a,t);
    }
}
void ajout(int i, string n="", string p="", string a="", string t=""){
    info[i]=new Information(n,p,a,t);
} 

Et pour ta ligne foireuse, je testerais :
index[i].info[j]=new Page();

Mais je ne me souviens plus très bien, et il me semble qu'il peut y avoir des problèmes avec le constructeur pas recopie, surtout dans ton cas où tu alloues dynamiquement de la mémoire dans cette classe. Il faut donc surcharger ce constructeur (par recopie) pour traiter cette allocation (attribut info).

N'oublies pas non plus de rajouter le destructeur de la classe Page pour désallouer la mémoire :
//Fonction inline, comme les tiennes
~Page() {
    delete[] info;
}


Cordialement, uaip.
0
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
10 avril 2012 à 10:35
Ce qu'a écrit uaip est correct sauf:
index[i].info[j]=new Page();

Cette ligne doit être supprimée. Il s'agit d'un tableau de 26, pas besoin d'allouer dynamiquement.
0
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
10 avril 2012 à 10:37
Au temps pour moi, j'ai mal lu le code... uaip a raison.
0
Rejoignez-nous