Création d'objets dans une boucle

Signaler
Messages postés
6
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
8 février 2006
-
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011
-
Bonjour à tous,
voilà ma question :
Je lis dans un fichier texte "x", "y","z" et "genre", qui sont les coordonnées de points ainsi que leur genre (sommet S ou point annexe PA d'un graphe). J'aimerais qu'à chaque lecture de ces 4 attributs, une fonction crée un objet "point" (ma classe "point" étant définie) et lui affecte ces attributs. Est-ce possible de créer dynamiquement dans une boucle des objets, leur donner un nom, etc... ou dois je connaitre et définir un nombre d'objets au départ ?
Merci d'avance de votre aide.

Nierpa

5 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Suffit de déclarer un tableau de point et un tableau de genre, de la taille suffisante avant de rentrer dans ta boucle.
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Imaginons un constructeur de ta classe Point(const float& x,const float& y,const float& z, const Genre& g);

sert toi du conteneur aproprié a ton besoin, ici un vector :

float x,y,z;
Genre g;
std::vector vectorPoint;
std::ifstream file("fichierDePoint.txt");
while(file.good())
{
file >> x >> y >> z >> g; // en considérant que Genre ai redéfini l'operateur >>
vectorPoint.push_back(new Point(x,y,z,g));
}
file.close();

KeniiyK
Messages postés
6
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
8 février 2006

Merci beaucoup de vos réponses !

Nierpa
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
J'ai répondu un peu vite...
Encore mieux, redéfini dans ta classe Point l'opérateur >>, ainsi :
...
Point *p;
while(file.good())
{
p=new Point();
file >> *p;
vectorPoint.push_back(p);
}
file.close();

Ou sans pointeur :

std::vector vectorPoint;
std::ifstream file("fichierDePoint.txt");
Point p;
while(file.good())
{
file >> p;
vectorPoint.push_back(p); // attention au constructeur de copie !!
}
file.close();

KeniiyK
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

c'est vrai que KeniyK est plus correct et plus claire