snoozriton
Messages postés12Date d'inscriptionjeudi 22 décembre 2011StatutMembreDernière intervention12 novembre 2010
-
2 janv. 2010 à 16:50
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 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...
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(){
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDerniè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;
}