CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Création d'un tableau d'objets dynamique

LepetitJinouga
LepetitJinouga
Niveau 35
01 décembre 2019 à 12:44:16

:salut:

Bon, je suis bloquer sur un exco en C++ nécessitant l'utilisation des classes.
Evidemment j'ai déjà fais de la POO avec du Javascript et du PHP, mais je trouve que sur le coup c'est bien différent.
Tout d'abord voici mon code en commençant par le fichier.h :

#include <String>



class Livre
{
private:
    std::string _titre;
    int _anneParution;
    double _prix;

public:

    Livre()
    {
        
    }

    void setTitre(std::string titre)
    {
        this->_titre = titre;
        
    }

    int setParution(int anneParution)
    {
        
    }

    double setPrix(double prix)
    {
        this->_prix = prix;
    }

    void getTitre() const
    {
        std::cout << _titre << std::endl;
    }

    int getParution()
    {
        
    }

    double getPrix()
    {
    
    }

    
};

Le fichier .cpp :

#include <iostream>
#include <string>
#include "Livre.h"
#include <vector>
using namespace std;

int main()
{
    int reponse{ 0 };
    int i{ 0 };
    

    string saisirLivre{ "" };
    int saisirAnnee{ 0 };
    double saisirPrix{ 0.0 };
    
    vector<Livre> livreObjets;

    return 0;
}

Objectif :
Créer un tableau d'objets dynamique pour que l'utilisateur puisse décider du nombre d'objets qu'il souhaite créer tous provenant de la class Livre.

Pour l'instant je fais des tests pour arriver au moins à donner en 1er lieu un titre à des objets de la classe Livre, mais je bloque, je n'y arrive pas si quelqu'un peut m'aider ça serait super.
Tout d'abord l'utilisation de vector<Livre> dans le .cpp est elle un bon début?

godrik
godrik
Niveau 30
01 décembre 2019 à 15:46:29

tu as des fonctions qui sont cense retourner des choses mais qui ne retournent rien. sinon, ca m'a l'air un bon debut.

mov_eax_1
mov_eax_1
Niveau 10
01 décembre 2019 à 16:24:08

si tu veux juste avoir un nombre précis d'objets dans ton vector tu peux faire:

vector<Livre> livreObjets;
livreObjets.resize(10);

ça te donnera 10 livres, mais attention ils ne seront pas initialisés.

mov_eax_1
mov_eax_1
Niveau 10
01 décembre 2019 à 16:28:32

if faut que tu précise un exemple concret de ce que tu attends

LepetitJinouga
LepetitJinouga
Niveau 35
05 décembre 2019 à 12:54:08

Désolé pour la réponse tardive, j'ai depuis réussi ce que je voulais faire mais j'ai des question qui me viennent en tête.

Le 01 décembre 2019 à 16:24:08 mov_eax_1 a écrit :
si tu veux juste avoir un nombre précis d'objets dans ton vector tu peux faire:

vector<Livre> livreObjets;
livreObjets.resize(10);

ça te donnera 10 livres, mais attention ils ne seront pas initialisés.

J'ai justement utilisé cela, mais ce que je comprend pas c'est que vois tu j'ai fais un cout << "message"; dans le bloc de code du constructeur pour faire voir un message apparaître à chaque fois que le compilateur fait appel au constructeur pour créer un objet.

Par exemple si je crée 10 livres, le message est censé s'afficher 10 fois, mais avec resize() ça fait appel au constructeur qu'une seule fois.
Par conséquent, le message s'affiche qu'une seule fois, je n'ai pas compris le phénomène, et toi tu dis que les 10 livres seront pas initialisés.

J'aimerais bien comprendre cela, aussi cette méthode avec resize() est elle une bonne pratique?

LepetitJinouga
LepetitJinouga
Niveau 35
05 décembre 2019 à 12:59:05

Voici mon code :

Fichier .cpp :

#include <iostream>
#include <string>
#include <vector>
#include "Livre.h"


int main()
{
	int nbrLivre{ 0 };
	std::string choix{ "" };
	std::vector<Livre> livre;

	std::string saisirLivre{ "" };
	std::string saisirAuteur_prenom{ "" };
	std::string saisirAuteur_nom{ "" };
	int saisirAnnee{ 0 };
	double saisirPrix{ 0.0 };


	//Saisi des livres

	std::cout << "Combien de livres souhaitez vous saisir? ";
	std::cin >> nbrLivre;

	livre.resize(nbrLivre);

	for (int i{ 0 }; i < nbrLivre; i++)
	{
		std::cout << "Saisir informations du livre numero " << i + 1 << " : " << std::endl;
		std::cout << "     -Saisir titre : ";
		std::cin >> saisirLivre;
		std::cout << std::endl;

		livre[i].setTitre(saisirLivre);

		std::cout << "     -Saisir prenom de l'auteur : ";
		std::cin >> saisirAuteur_prenom;
		std::cout << std::endl;

		livre[i].setAuteurPrenom(saisirAuteur_prenom);

		std::cout << "     -Saisir Nom de l'auteur : ";
		std::cin >> saisirAuteur_nom;
		std::cout << std::endl;

		livre[i].setAuteurNom(saisirAuteur_nom);

		std::cout << "     -Saisir annee : ";
		std::cin >> saisirAnnee;
		std::cout << std::endl;

		livre[i].setParution(saisirAnnee);

		std::cout << "     -Saisir le prix : ";
		std::cin >> saisirPrix;
		std::cout << std::endl;

		livre[i].setPrix(saisirPrix);
	}

	//Affichage des informations des livres 

	for (int i{ 0 }; i < nbrLivre; i++)
	{
		std::cout << i + 1 << ".Livre ";
		livre[i].affichage_titre();
	}


	std::cout << std::endl << "Saisir un titre parmi les livres ci-dessus : ";
	std::cin >> choix;
	std::cout << std::endl;

	while (!(choix.compare("Q") == 0))
	{
		for (auto const element : livre)
		{
			if (choix.compare(element.getTitre()) == 0)
			{
				element.affichage_detaillee();
				break;
			}
			else
			{
				std::cout << "Erreur!" << std::endl;
			}
		}

		std::cout << std::endl << std::endl << "Saisir un titre pour continuer ou \"Q\" pour quitter: ";
		std::cin >> choix;
		std::cout << std::endl;
	}

	std::cout << "Arret du programme";





	return 0;
}

Fichier .h :

class Livre
{
private:
	std::string _titre;
	std::string _auteurPrenom;
	std::string _auteurNom;
	int _anneParution;
	double _prix;

public:

	Livre() {
		std::cout << "Appel" << std::endl;
	}

	~Livre() {}


	void setTitre(std::string titre)
	{
		this->_titre = titre;

	}

	void setAuteurPrenom(std::string auteurPrenom)
	{
		this->_auteurPrenom = auteurPrenom;
	}

	void setAuteurNom(std::string auteurNom)
	{
		this->_auteurNom = auteurNom;
	}

	void setParution(int anneParution)
	{
		this->_anneParution = anneParution;
	}

	void setPrix(double prix)
	{
		this->_prix = prix;
	}

	std::string getTitre() const
	{
		return _titre;
	}

	void affichage_titre() const
	{
		std::cout << _titre << std::endl;
	}

	void affichage_detaillee() const
	{
		std::cout << "Titre du livre : " << _titre << std::endl;
		std::cout << "Auteur du livre : " << _auteurPrenom << " " << _auteurNom << std::endl;
		std::cout << "Anne de parution du livre : " << _anneParution << std::endl;
		std::cout << "Prix du livre : " << _prix << " euros" << std::endl;
	}
};

D'ailleurs, n'hésitez pas à me le dire si vous apercevez d'autres mauvaises pratiques de programmation en C++.
Aussi, le code vous paraît il propre?

Raidden36
Raidden36
Niveau 6
05 décembre 2019 à 14:55:56

Oula, propre, non, ton main fait BEAUCOUP trop de choses ^^' faut séparer en fonctions si tu veux que ce soit un minimum propre.
De même, les getter et les setters, c'est bien, mais si les variables concernés sont en private, sinon ça sert à rien ^^

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment