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++ / POO / probleme avec les classes.

farfadetsan
farfadetsan
Niveau 6
31 juillet 2006 à 11:28:48

Salut :

Je commence a me servir des classes en c++ et j´ai qqes questions :

Peut on construire 50 objet en meme temp au cour d´un programme ( avec les memes propriétés ) sans écire 50 ligne et donner des noms différents a chacuns. J´ai penser a faire un tableau d´objet, est-ce possible ?

Comment faire pour que (par exemple ) à chaque fois que j´appuye sur "enter", ca cré un nouvel objet ( tous avec les memes propriétés ) ?

:question:

voila, si vs savez aidez moi !

bye.

godrik
godrik
Niveau 30
31 juillet 2006 à 12:55:36

bah.
Objet** tab = new Objet*[50];
for (int i=0; i< 50; i++)
tab[i] = new Objet(a,b,c,d);

farfadetsan
farfadetsan
Niveau 6
31 juillet 2006 à 13:09:39

:lol:

ca veut dire koi ** ?
et new ca sert a koi exactement ?

( si c´est en rapport avec les pointeurs, moi je coné que * et & )

godrik
godrik
Niveau 30
31 juillet 2006 à 13:58:18

c´est un pointeur de pointeur
int: un entier
int*: un pointeur vers un entier
int** <-> (int*)* :un pointeur vers (un pointeur vers un entier)

farfadetsan
farfadetsan
Niveau 6
31 juillet 2006 à 14:12:24

ok je voix....

Objet** tab : tu declare un pointeur que tu appele tab qui va pointé un autre pointeur qui va lui meme pointé un Objet... je me trompe ? ( enfin c un peu tordu qd meme )

et new Objet*[50]; ca veut dire quoi ? une maniere de déclarer un objet ? ( moi pour declarer un objet je fait :

Objet monobjet(a,b,c,d);

Et aprés ca, mon objet il va s´apelé tab[x] ou *tab[x] ?

Bakura10
Bakura10
Niveau 3
31 juillet 2006 à 21:13:12

Plus simplement, tu peux utiliser un vector pour stocker tes objets :

vector <TaClasse> tableauTest;

for (int i = 0 ; i < 50 ; i++)
{
tableauTest.push_back (TaClasse (i));
}

tableauTest.clear(); // On nettoie le vector

Si tu veux des pointeurs sur tes objets tu écris
vector <TaClasse *> tableauTest;

farfadetsan
farfadetsan
Niveau 6
31 juillet 2006 à 23:03:03

ok merci mais j´aimerai bien comprendre comment fonctionne la 1ere qqun peut m´expliquer ??

godrik
godrik
Niveau 30
01 août 2006 à 00:06:33

Object** tab = new Object*[50];
ca, ca crée un tableau de pointeur sur des Object.
for (int i=0; i<50; i++)//pour chaque case
tab[i] = new Object(...);//crée un objet comme i
l faut.

a la fin il faut bien sur les detruire:
for (int i=0; i<50; i++)
delete tab[i];

mais le tableau il faut le detruire aussi
delete[]tab;

LGV
LGV
Niveau 28
01 août 2006 à 10:06:03

notons que cette approche favorise la fragmentation memoire ; pour ceux qui savent un peu ce qu´ils font, la version "placement new" permet de faire ca avec des bloc de memoire contigus. (voire aller plus avec une methode "data en (this + 1)" )

firya
firya
Niveau 6
02 août 2006 à 09:43:37

@farfadetsan: new est l´opérateur d´allocation dynamique de mémoire... en C, on utilise les fonctions malloc/calloc/realloc tandis qu´en C++, on utilise les mots réservés du langage, à savoir new et delete (pour libérer la mémoire)

Bref, ce qu´il faisait, c´était ceci (et c´était pas tordu) :

// new renvoie un pointeur vers l´objet créé... en
l´occurence, ici, on va créer un vecteur de 50 pointeurs d´objets. Vu que new renvoie un pointeur vers le premier emplacement du vecteur, il renvoie donc un pointeur de pointeur du premier emplacement. tab sera donc un pointeur de pointeur visant le premier emplacement. *tab sera le premier pointeur de ton vecteur et **tab sera l´objet pointé.

Objet** tab = new Objet*[50];

// Il utilise une boucle qui va tourner 50x

for (int i=0; i< 50; i++)

// Cette ligne sera donc bouclée 50x mais i sera d
´abord 0, puis 1, puis 2... jusqu´à 49. Avec new, on alloue de la mémoire pour un objet et new renvoie un pointeur vers l´objet pour lequel on vient d´allouer la mémoire

tab[i] = new Objet(a,b,c,d);

Au final, tu te retrouves donc avec un vecteur (un tableau à une dimension) contenant 50 pointeurs vers tes objets et tab pointe vers ce tableau (donc il pointe vers le premier pointeur du tableau)

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