PB tableau

Signaler
Messages postés
8
Date d'inscription
dimanche 22 octobre 2006
Statut
Membre
Dernière intervention
10 novembre 2006
-
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
Bonjour à tous

Je vous explique mon problème qui me resiste depuis longtemps :

J'ai une classe mère qui s'appelle ouvrages (qui est de plus une abstract classe). Cette classe ouvrage a deux classes dérivées :
    - une classe livre
    - une classe revue.

J'ai ensuite créer une classe bibliothèque de la manière suivante

class biblio:
    string nom
    livre liste_livre[20]
    revue liste_revue[20]
    int nombre_livre_deja_enregistrés
    int nombre_revue_deja_enregistrés

Maintenant je voudrais définir mon constructeur de ma biblio pour qu'il prenne en argument un string qui représentera son nom et un tableau d'ouvrages (que l'on aura défini dans le main).

C'est à dire je voudrais faire la copie  de mon vecteur que j'aurais defini dans mon main dans les deux tableaux qui composent ma classe biblio...
Sachant bien sur que le tableau d'ouvrage defini dans le main est defini grace a des pointeurs

ouvrage *liste_test[10];
liste_test[0]=&livre1;

Mon constructeur devra parcourir ma liste_test, definir si c'est un livre ou une revue et faire une copie de mon objet dans le tableau approprié...

Mon premier problème est de lui faire comprendre que j'ai en argument un string qui représente un nom et un tableau d'ouvrages de taille quelconque.
Ensuite je fais un test sur le type d'objet que je rentre et je choisi le tableau approprié.
Et la mon deuxième problème : comment lui faire copier mon objets livre ou revue dans ce vecteur...
Alors j'ai essayé avec un interpret cast et en appelant un copy constructor mais rien ca ne marche pas....(ce que j'ai a ma disposition : copy constructor, overloading sur l'operateur =)

Je suis perdu, merci d'avance

                                   

5 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
"en argument un string qui représentera son nom" => son nom de quoi ? c'est quoi ce nom ?


Pour le constructeur:

biblio(const std::string & _name, ouvrages ** _array); // je vois pas trop ou tu bloques


Un test sur le type d'objet => c'est jamais terrible, mieux vaut
définir un enum "type" qui permettra de savoir facilement si c'est un
livre ou une revue.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
luhtor-> je pense que le nom est celui de la bibliothèque.
Sinon, pour proposer une autre solution que l'enum, tu peux créer une fonction dans la classe ouvrage qui s'occupe directement de copier l'élément dans le tableau, et implémenter les fonctions dérivées pour qu'elles se copient au bon endroit :

void ouvrage::CopyToBuffer(liste**plBuffer,revue**prBuffer)=0;

void revue::CopyToBuffer(livre**plBuffer,revue**prBuffer)
{
   (*prBuffer)=new revue(*this);
   (*prBuffer)++;
}

void livre::CopyToBuffer(livre**plBuffer,revue**prBuffer)
{
   (*plBuffer)=new livre(*this);
   (*plBuffer)++;
}

Puis dans le constructeur de Biblio :
Biblio::Biblio(const std::string& name, ouvrages*pBuffer,int nOuvrages)
{
   // pour chaque ouvrage i...
   pBuffer[i]->CopyToBuffer(&liste_livre,&liste_revue);
}
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oue mais imagine apres que tu veilles ajouter une nouvelle catégorie de
livre :) Vive le boulo, alors que meme si un enum est pas
particulièrement beau, il a le mérite d'etre évolutif facilement.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Bien sûr, je n'ai pas dit que c'était meilleur.
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
chuis ok avec la méthode des classes dérivées, perso.
Utilise un std::vector, plus besoin de nombre_{livre|revue}_deja_enregistrés ( a propos comment t'arrives à mettre un accent dans une source ? t'as quel complio ? ) et pour copier, un simple = suffit. Tu pourras aussi passer par référence. plus de pb.

_______________________

Omnia vincit labor improbus