Manipulation de tableaux dynamiques
Bonjour,
J'ai une question à propos les tableaux dynamiques.
J'ai un tableau dynamique de type
J'ai une question à propos les tableaux dynamiques.
J'ai un tableau dynamique de type
Exemplaire *. Il contient des pointeurs comme indiqué dans le code. Je veux afficher les exemplaires ayant une oeuvre spécifiée, sachant qu'oeuvre est un des attributs de la classe
Exemplaire.
#include <vector> #include <string> #include <iostream> using namespace std; class Bibliotheque{ private: vector<Exemplaire*> exemplaire; string name; public: Bibliotheque(string testnom): name(testnom) { cout << "La bibliothèque" << name << "est ouverte !" << endl; } string getNom() { return name; } void stocker(Oeuvre & o) { Exemplaire* ex = new Exemplaire(o); exemplaire.push_back(ex); } void stocker(Oeuvre & o, int n) { Exemplaire * ex = new Exemplaire(o); for (int i = 0; i < n; i++) { exemplaire.push_back(ex); } } void lister_exemplaires () { for(int i = 0; i < exemplaire.size(); i++) { exemplaire[i]->Afficher(); } } void lister_exemplaires(Oeuvre & o) { int j = 0; Exemplaire * ex = new Exemplaire(o); for (int i = 0; i < exemplaire.size(); i++) { if (exemplaire[i] == *ex) { j = j + 1; } return j; cout << endl; } } ~Bibliotheque() { cout << "La bibliothèque " << name << " ferme ses portes, et détruit ses exemplaires :" <<endl; } };
A voir également:
- Tableau dynamique d'objet c++
- Tableau croisé dynamique - Guide
- Tableau word - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Tableau ascii - Guide
- Trier un tableau excel - Guide
1 réponse
Bonjour,
Plusieurs conseils préalables :
Et sinon sans le code des classes manquantes, on ne peut pas trop répondre.
Le plus naturel serait de définir dans
Du coup on aurait quelque chose du genre :
Bonne chance
Plusieurs conseils préalables :
- soigne l'indentation (cf ton post corrigé)
- donne un code qu'on peut compiler (ici par exemple il manque les classes
Exemplaire
etOeuvre
) - corrige les erreurs de compilation (dans ton message initial, il manquait une accolade).
- en C++ il y a des conventions de notations : en outre une méthode commence par une minuscule, donc
Afficher
devrait devenirafficher
. Dans la même veine il faut choisir comment tu nommes tes méthodes, soit en minuscules avec des_
soit en camel-case. Mais il n'est pas logique d'avoir dans le même codegetNom
etlister_exemplaires
, ce sont deux styles de notations différents. - Dans la même veine, soit tu fais tout en français, soit tout en anglais. Mais il n'est pas logique d'avoir dans ton code tantôt une variable
name
, et tantôt une méthodegetNom
. - un petit merci ne serait pas de trop :-)
- ta première méthode
lister_exemplaires
devrait être renomméeafficher_exemplaires
. Ton attribut de classeexemplaire
devrait être renomméexemplaires
. - ta seconde méthode
lister_exemplaires
retourne un entier alors qu'elle est supposée ne rien retourner (void
). D'ailleurs lereturn
n'est pas au bon endroit et la fonction semble mal nommée (pour le moment ça ressemble plus àcompter_exemplaires_contenant
). - enfin ta fonction getNom devrait plutôt être écrite ainsi :
inline const std::string & get_nom() const { return this.nom; }
Et sinon sans le code des classes manquantes, on ne peut pas trop répondre.
Le plus naturel serait de définir dans
Exemplaireune méthode
bool contient_oeuvre(const Oeuvre & o)et d'adapter dans
Bibliothequeta fonction
lister_exemplaires.
Du coup on aurait quelque chose du genre :
vector<Exemplaire> lister_exemplaires_contenant(Oeuvre & o) { vector<Exemplaire> ret; for (const Exemplaire & ex : this.exemplaire) { if (ex.contient_oeuvre(o)) { ret.push_back(ex) } } return ret; }
Bonne chance