Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
770 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C, C++] Tableau d'objets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C, C++] Tableau d'objets

n°211621
try58
Posté le 10-09-2002 à 15:01:51  profilanswer
 

Mon pb est assez complexe a expliquer.
J'ai cree une classe que j'appelle CMaClasse. J'aimerai passer au constructeur un tableau d'objets de type CMaClasse2.
Ma question est : Quelle est la syntaxe que je dois utiliser pour mon tableau sachant que le constructeur de la classe CMaClasse2 prend plusieurs parametres qu'il faut obligatoirement initialiser?
Ex:

Code :
  1. CMaClasse2::CMaClasse2(CString string1, CString string2)
  2. {
  3. }


Au debut, j'avais utilise un tableau de structures que j'initialisais comme ceci:

Code :
  1. Mystruct_t Tab[2] =
  2. {
  3.      {"toto", "titi"},
  4.      {"tata", "tutu"}
  5. };


 
En fait, j'aimerai remplacer la structure Mystruct_t par la classe CMaClasse2.


---------------
LOVE & PEACE !!! [:kirvel]
mood
Publicité
Posté le 10-09-2002 à 15:01:51  profilanswer
 

n°211630
LetoII
Le dormeur doit se réveiller
Posté le 10-09-2002 à 15:12:04  profilanswer
 

try58 a écrit a écrit :

Mon pb est assez complexe a expliquer.
J'ai cree une classe que j'appelle CMaClasse. J'aimerai passer au constructeur un tableau d'objets de type CMaClasse2.
Ma question est : Quelle est la syntaxe que je dois utiliser pour mon tableau sachant que le constructeur de la classe CMaClasse2 prend plusieurs parametres qu'il faut obligatoirement initialiser?
Ex:

Code :
  1. CMaClasse2::CMaClasse2(CString string1, CString string2)
  2. {
  3. }


Au debut, j'avais utilise un tableau de structures que j'initialisais comme ceci:

Code :
  1. Mystruct_t Tab[2] =
  2. {
  3.      {"toto", "titi"},
  4.      {"tata", "tutu"}
  5. };


 
En fait, j'aimerai remplacer la structure Mystruct_t par la classe CMaClasse2.




 
Tableau d'objet => constructeur par défaut. Si t'as pas de constructeur par défaut tu peux pour une classe pas faire de tableau d'objet de cette classe.
 
Après ça marche comme les tableau te types atomiques (ça se dit ça? comme des int quoi :D)


---------------
Le Tyran
n°211636
try58
Posté le 10-09-2002 à 15:16:43  profilanswer
 

Qu'est ce que tu entends par constructeur par defaut? un constructeur sans parametre?


---------------
LOVE & PEACE !!! [:kirvel]
n°211640
LetoII
Le dormeur doit se réveiller
Posté le 10-09-2002 à 15:19:24  profilanswer
 

try58 a écrit a écrit :

Qu'est ce que tu entends par constructeur par defaut? un constructeur sans parametre?




 
c ça, ou dont tous les paramètres ont une valeur par défaut.


---------------
Le Tyran
n°211650
try58
Posté le 10-09-2002 à 15:27:01  profilanswer
 

letoII a écrit a écrit :

 
 
c ça, ou dont tous les paramètres ont une valeur par défaut.



Donc le seul moyen c'est d'utiliser la structure a la place de la classe, comme j'ai ecrit precedement !?


---------------
LOVE & PEACE !!! [:kirvel]
n°211652
LetoII
Le dormeur doit se réveiller
Posté le 10-09-2002 à 15:28:37  profilanswer
 

try58 a écrit a écrit :

Donc le seul moyen c'est d'utiliser la structure a la place de la classe, comme j'ai ecrit precedement !?




 
Ben tu peux aussi faire un tableau et puis initiliser tes données de chaque objet aprés.


---------------
Le Tyran
n°211657
try58
Posté le 10-09-2002 à 15:35:07  profilanswer
 

letoII a écrit a écrit :

 
 
Ben tu peux aussi faire un tableau et puis initiliser tes données de chaque objet aprés.




ok, je vais faire comme ca, merci!
Sinon je voulais savoir, (au risque de faire partir ce topic a coup de trolls) si c'est correct d'utiliser les structures en c++?


---------------
LOVE & PEACE !!! [:kirvel]
n°211660
LetoII
Le dormeur doit se réveiller
Posté le 10-09-2002 à 15:42:25  profilanswer
 

try58 a écrit a écrit :

 
ok, je vais faire comme ca, merci!
Sinon je voulais savoir, (au risque de faire partir ce topic a coup de trolls) si c'est correct d'utiliser les structures en c++?




 
C pas génial mais pour faire des trucs simple pkoi pas


---------------
Le Tyran
n°211661
try58
Posté le 10-09-2002 à 15:44:30  profilanswer
 

letoII a écrit a écrit :

 
 
C pas génial mais pour faire des trucs simple pkoi pas



Ok!


---------------
LOVE & PEACE !!! [:kirvel]
n°211709
LeGreg
Posté le 10-09-2002 à 16:45:09  profilanswer
 

en C++, struct == class
qu'on se le dise.
 
la difference c'est les droits d'acces
public par defaut pour une struct
et private par defaut pour une classe
c'est tout.
 
LeGreg

mood
Publicité
Posté le 10-09-2002 à 16:45:09  profilanswer
 

n°211714
LetoII
Le dormeur doit se réveiller
Posté le 10-09-2002 à 16:51:11  profilanswer
 

legreg a écrit a écrit :

en C++, struct == class
qu'on se le dise.
 
la difference c'est les droits d'acces
public par defaut pour une struct
et private par defaut pour une classe
c'est tout.
 
LeGreg




 
Jamais dit le contraire, mais je trouve l'utilisation des struct légérement moin propre. Bon ca m'empéche pas de les utiliser.


---------------
Le Tyran
n°212057
Joel F
Real men use unique_ptr
Posté le 11-09-2002 à 11:22:15  profilanswer
 

letoII a écrit a écrit :

 
 
Tableau d'objet => constructeur par défaut. Si t'as pas de constructeur par défaut tu peux pour une classe pas faire de tableau d'objet de cette classe.
 
Après ça marche comme les tableau te types atomiques (ça se dit ça? comme des int quoi :D)




 
Atomique oauip ca se dit, c'est comme la balle.
 
les struct sinon c sympa pour passer des kilos d'arguments à une méthode bien chiadée.

n°212061
try58
Posté le 11-09-2002 à 11:29:47  profilanswer
 

Joel F a écrit a écrit :

 
 
Atomique oauip ca se dit, c'est comme la balle.
 
les struct sinon c sympa pour passer des kilos d'arguments à une méthode bien chiadée.




Tu peux faire la meme chose avec une classe et des kilos de variables membres


---------------
LOVE & PEACE !!! [:kirvel]
n°212062
Joel F
Real men use unique_ptr
Posté le 11-09-2002 à 11:32:24  profilanswer
 

ouaip c moins chiant le truc du style :
 

Code :
  1. struct OPENGLARG
  2. {
  3.   int bpp;
  4.   int width;
  5. .
  6. .
  7. .
  8. };


 
que
 

Code :
  1. class OpenGLArg
  2. {
  3. public get/setBPP()
  4. etc ...
  5. };


Message édité par Joel F le 11-09-2002 à 11:32:35
n°212107
kenshiro18​2
Posté le 11-09-2002 à 12:55:17  profilanswer
 

CMaClasse2 Tab[] =
{
 CMaClasse2("toto", "titi" ),
 CMaClasse2("toto", "titi" )
};

n°212214
LeGreg
Posté le 11-09-2002 à 14:49:17  profilanswer
 

letoII a écrit a écrit :

 
Jamais dit le contraire, mais je trouve l'utilisation des struct légérement moin propre. Bon ca m'empéche pas de les utiliser.




 
c'est marrant que tu dises ca parce qu'assez paradoxal
en quoi une struct est moins propre qu'une classe
quand il s'agit de la meme chose en fait
(avec un public en moins, ca epargne une ligne de code).
 
En fait, en y reflechissant, une struct ca sert a la compatibilité du C, c'est pour ca que c'est present,
si le C++ avait ete crée de "zero", sans doute n'y aurait-il
jamais eu de mot clé struct en C++ (comme il n'y aurait pas
eu de distinction pointeur/reference et les arrays auraient ete moins merdiques et j'en passe :) ).
 
Sinon le seul probleme de proprete (outre de faire cohabiter deux notations redondantes) que je vois c'est
pour le sacro saint principe d'encapsulation de la POO
les variables membres par défaut étant public ca encouragerait
a les laisser public, ce qui est plutot mauvais.
 
Donc oui, peut-etre mais..
(reponse de normand :) )
 
LeGreg

n°212221
LetoII
Le dormeur doit se réveiller
Posté le 11-09-2002 à 14:54:20  profilanswer
 

legreg a écrit a écrit :

 
 
c'est marrant que tu dises ca parce qu'assez paradoxal
en quoi une struct est moins propre qu'une classe
quand il s'agit de la meme chose en fait
(avec un public en moins, ca epargne une ligne de code).
 
En fait, en y reflechissant, une struct ca sert a la compatibilité du C, c'est pour ca que c'est present,
si le C++ avait ete crée de "zero", sans doute n'y aurait-il
jamais eu de mot clé struct en C++ (comme il n'y aurait pas
eu de distinction pointeur/reference et les arrays auraient ete moins merdiques et j'en passe :) ).
 
Sinon le seul probleme de proprete (outre de faire cohabiter deux notations redondantes) que je vois c'est
pour le sacro saint principe d'encapsulation de la POO
les variables membres par défaut étant public ca encouragerait
a les laisser public, ce qui est plutot mauvais.

 
Donc oui, peut-etre mais..
(reponse de normand :) )
 
LeGreg




 
C exactement a ça que je pensais.


---------------
Le Tyran
n°212226
try58
Posté le 11-09-2002 à 14:56:49  profilanswer
 

kenshiro182 a écrit a écrit :

CMaClasse2 Tab[] =
{
 CMaClasse2("toto", "titi" ),
 CMaClasse2("toto", "titi" )
};




Merci je vais essayer de suite !


---------------
LOVE & PEACE !!! [:kirvel]
n°212585
Musaran
Cerveaulté
Posté le 12-09-2002 à 03:26:35  profilanswer
 

Code :
  1. class C{public:
  2. C(int){}
  3. };
  4. C tab[3]= {1,2,3};

Ça c'est permis, pas de problème.
 

Code :
  1. class C{public:
  2. C(int, char){}
  3. };
  4. C tab[3]= {{1,'A'},{2,'B'},{3,'C'}};

Ça non, pourquoi ?
Parce que les accolades initialisent des tableaux ou des membres de structure, mais pas des arguments de constructeurs.
Dans le premier exemple, en fait, il y a juste conversion implicite des nombres en C.
Et le C(++) ne convertit pas implicitement plusieurs valeurs en une seule !
 

Code :
  1. class C{public:
  2. C(int, char=' '){}
  3. };
  4. C tab[3]= {1,2,3};

Deux arguments, dont un avec valeur par défaut. Pas très intéressant, mais...

Code :
  1. char Cfiller(){
  2. static int n= 0;
  3. static char fill[]= {'A','B','C'};
  4. return fill[n++];
  5. }
  6. class C{public:
  7. int i;
  8. char c;
  9. C(int ii, char cc= Cfiller()):i(ii),c(cc){}
  10. };
  11. C tab[3]= {1,2,3};

Voilà un moyen détourné, illisible et dangereux d'y parvenir.
Et bogué en plus: l'ordre dans lequel les éléments du tableau sont construits (et recoivent les valeurs) est dépendant du compilateur.
 
Non, la bonne solution que j'avais oublié et que kenshiro182 rapelles, c'est de construire explicitement chaque objet.
 
 

legreg a écrit a écrit :

...comme il n'y aurait pas
eu de distinction pointeur/reference...


Peut-être que si. Y'a quand même pas mal de différences:
Pointeurs: explicite, puissant, dangereux, NULL possible.
Référence: implicite, simple  , sûr      , toujours valide.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°219808
try58
Posté le 25-09-2002 à 10:18:30  profilanswer
 

Comment je peux faire pour terminer mon tableau? J'ai essaye en mettant 0 a la fin mais il me dit : impossible de convertir de 'int' en 'CMaClasse2'.


---------------
LOVE & PEACE !!! [:kirvel]
n°219816
LetoII
Le dormeur doit se réveiller
Posté le 25-09-2002 à 10:33:07  profilanswer
 

try58 a écrit a écrit :

Comment je peux faire pour terminer mon tableau? J'ai essaye en mettant 0 a la fin mais il me dit : impossible de convertir de 'int' en 'CMaClasse2'.  




 
 :heink:


---------------
Le Tyran
n°219990
BifaceMcLe​OD
The HighGlandeur
Posté le 25-09-2002 à 15:00:35  profilanswer
 

Musaran a écrit a écrit :

Code :
  1. [cpp]class C{public:
  2. C(int, char){}
  3. };
  4. C tab[3]= {{1,'A'},{2,'B'},{3,'C'}};

Ça non, pourquoi ?
Parce que les accolades initialisent des tableaux ou des membres de structure, mais pas des arguments de constructeurs.




Ca ne fait pas beaucoup de différence avec ça du point de vue syntaxe :

Code :
  1. C tab[3]= { C(1, 'A') , C(2, 'B'), C(3, 'C') };


(sauf que ça, ça marche, comme kenshiro182 l'a dit).


Message édité par BifaceMcLeOD le 25-09-2002 à 15:02:10
n°220324
Musaran
Cerveaulté
Posté le 26-09-2002 à 02:13:53  profilanswer
 

C'est juste une mauvaise surprise pour celui qui veut faire évoluer une structure C en classe C++.
 
Le premier ne marche qu'avec des aggrégats sans constructeurs.
Le second ne marche qu'avec des constructeurs.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°220394
BifaceMcLe​OD
The HighGlandeur
Posté le 26-09-2002 à 09:57:23  profilanswer
 

:jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C, C++] Tableau d'objets

 

Sujets relatifs
[VC++] Où peut on trouver un tableau avec les valeurs RGB ? RESOLUUn itérateur sur un tableau [RESOLU]
Taille d un tableau fixéTableau d'objet : comment çà marche
[ASP] Doublons dans un tableauTableau - tester si une valeur est présente
[CSS + XHTML strict] Problème de tableau dans un cellule d'un tableau.Clonage d'objets RESOLU
Le topic qui a été effacé... (Tableau HTML de merde explosé)[PHP] Tableau d'objet
Plus de sujets relatifs à : [C, C++] Tableau d'objets


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR