petitavion414
Messages postés8Date d'inscriptiondimanche 22 octobre 2006StatutMembreDernière intervention10 novembre 2006
-
28 oct. 2006 à 12:27
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 2010
-
1 nov. 2006 à 12:33
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 =)
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 28 oct. 2006 à 14:43
"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.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 28 oct. 2006 à 16:46
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 :
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);
}
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 28 oct. 2006 à 20:53
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.
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 1 nov. 2006 à 12:33
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.