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

  FORUM HardWare.fr
  Programmation
  C++

  recupere ou mettre a jour un tableau de double dans une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

recupere ou mettre a jour un tableau de double dans une classe

n°1236048
sylvaing
Posté le 01-11-2005 à 23:54:40  profilanswer
 

Hola tout le monde,
 
J ai une classe du type:
 
[#ff0000][#ff0000]class myClass
{
pritate:
double toto[10];
 
public:
double get_toto(){return toto;};
void     set_toto(double tata){toto=tata;};
}
[/#ff0000][/#ff3800]
 
 
dans un progamme j ai un objet
 
 
double titi[10];
 
myClass *objet=new myClass();
 
titi=objet->get_toto();
objet->set_toto(titi);

 
Les deux derniere commande ne marche pas.... je ne sais pas comment recuperer ou mettre a jour mon tableau de double toto.... :( Quelqu un pourrait il m expliquer ? :(

mood
Publicité
Posté le 01-11-2005 à 23:54:40  profilanswer
 

n°1236094
scol30
Posté le 02-11-2005 à 08:06:32  profilanswer
 

Plusieurs raisons expliquant que cela ne fonctionne pas.  
 
- Tu uilise des tableau statiques => tu ne peux pas ecrire
  titi=get_toto(); mais tu devrais plutot ecrire une boucle for(inti ....) et remplir ton tableau statique element par element.
 
- ensuite tu utilise des tableaux et tes methodes de classe prennent en parametre une simple variable double. Il te faut donc passer des double* en parametre.
 
Essaies avec des trucs comme cela
class myClass {
private:
  int nbVal_;
  double* toto_;
   
public:
  myClass() : nbVal_(10) {
    toto_ = new double[nbVal_];
    init();
  }
  myClass(int val) : nbVal_(val) {
    toto_ = new double[nbVal_];
    init();
  }
  void init();
  double* get_toto(){return toto_;};
  void     set_toto(double* tata){toto_=tata;};
};
 
void myClass::init() {
  for(int i=0 ; i < nbVal_ ; i++)
    toto_[i] = i;
}
int main(void) {
  double* titi;  
  double tata[10] = {11,22,33,44,55,66,77,88,99,1010};  
  myClass *objet=new myClass();
   
  titi=objet->get_toto();
  std::cerr<< titi[3] << std::endl;
  objet->set_toto(tata);
  titi=objet->get_toto();
  std::cerr<< titi[3] << std::endl;
  return0;
}

n°1238241
jesus_chri​st
votre nouveau dieu
Posté le 03-11-2005 à 21:51:58  profilanswer
 

Code :
  1. myClass() : nbVal_(10) {
  2.     toto_ = new double[nbVal_];
  3.     init();
  4.   }
  5.   myClass(int val) : nbVal_(val) {
  6.     toto_ = new double[nbVal_];
  7.     init();
  8.   }


 
c'est quoi ça, on est pas en Java !
 

Code :
  1. myClass(int val = 10) : nbVal_(val) {
  2.     toto_ = new double[nbVal_];
  3.     init();
  4.   }

c'est mieux non ?

n°1238251
jesus_chri​st
votre nouveau dieu
Posté le 03-11-2005 à 22:04:08  profilanswer
 

Code :
  1. class myClass
  2. {
  3. private:
  4.   vecor<double> toto_;
  5.  
  6. public:
  7.   myClass(int val = 10) : toto_(val, 0.0) { }
  8.   const double* get_toto() {return &(toto_[0]);} // un peu crade mais conforme ISO98
  9.   void set_toto(const vector<double>& tata) {toto_ = tata;}
  10. };
  11. int main(void)
  12. {
  13.   const double* titi; 
  14.   double tata[10] = {11,22,33,44,55,66,77,88,99,1010};
  15.   vector<double> vecTata(tata, tata + 10); // tata en vecteur
  16.   myClass *objet=new myClass(); // le new ne sert à rien, la pile ça existe, on est pas en java
  17.  
  18.   titi=objet->get_toto();
  19.   std::cerr<< titi[3] << std::endl;
  20.   objet->set_toto(vecTata);
  21.   titi=objet->get_toto();
  22.   std::cerr<< titi[3] << std::endl;
  23.   return 0; // inutile
  24. }


 
remarques :

  • en C++ on a pas de garbage collector, mais on a la pile et la STL. Il faut utiliser un maximum la STL et faire le moins de new possible. Sans utilisation du polymorphisme, on peut faire du code sans aucun new, donc normalement sans fuite. Les new ne sont pas exception-safe. Ici dans ce code que je n'ai pas entièrement corrigé, il y a un new sans son delete. Sylvaing t'as fait trop de java :non:
  • il n'y a pas de point-virgule après une définition de méthode { code; }; <-- non ! { code } <-- oui
  • return 0; à la fin du main ne sert à rien.
  • ne pas oublier les const, éviter les pointeurs

n°1238351
++fab
victime du syndrome IH
Posté le 04-11-2005 à 00:56:52  profilanswer
 

jesus_christ a écrit :

Les new ne sont pas exception-safe


typo ?

n°1239068
jesus_chri​st
votre nouveau dieu
Posté le 04-11-2005 à 20:24:21  profilanswer
 

ok j'exagère un peu, disons que pour rendre un new (ou malloc) exception safe, il faut ajouter du code, ce qui n'est pas le cas avec les containers.
 
ex :

Code :
  1. MaClasse::MaClasse()
  2. {
  3.    m_tata = new int[10];
  4.    m_toto = new float[42];
  5. }
  6. int main()
  7. {
  8.    MaClasse m;
  9. }


 
si le deuxième new échoue, lancement de bad_alloc et pas d'objet m créé. m_tata est perdu et innacessible.
 

Code :
  1. MaClasse::MaClasse()
  2. {
  3.    m_tata = vector<int>(10);
  4.    m_toto = vector<float>(42);
  5. }


 
Volume de code équivalent, si l'allocation à l'intérieur de vector<float>(42); échoue, la mémoire de m_tata est libérée.
 

Code :
  1. MaClasse::MaClasse() : m_tata(NULL), m_toto(NULL)
  2. {
  3.    try
  4.    {
  5.       m_tata = new int[10];
  6.       m_toto = new float[42];
  7.    }
  8.    catch (bad_alloc& )
  9.    {
  10.       delete[] m_tata;
  11.       delete[] m_toto;
  12.    }
  13. }


Lourd et moche.

n°1239182
++fab
victime du syndrome IH
Posté le 05-11-2005 à 00:02:10  profilanswer
 

jesus_christ a écrit :

ok j'exagère un peu, disons que pour rendre un new (ou malloc) exception safe,


abus de langage (au mieux), je crois que l'on dirait plutot dans ce cas : rendre le constructeur exception safe.
 
Sinon, tes exemples illustre bien un des arguments principal contre les tableaux C-style en C++.


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

  recupere ou mettre a jour un tableau de double dans une classe

 

Sujets relatifs
ASP pb pour créer un lien qui inclueraient une page dans un tableauMettre un Powerpoint en HTML
OnMouseOver sur texte dans un tableau[PHP] Supprimer une valeur d'un tableau
[débutant] Image dans un tableau...[PHP / HTML] Bloqué dans mon tableau
Probleme en C++ de classeProblème d'enregistrement des données dans une classe
Méthode de remplissage de tableauasp:Repeater : Comment mettre un "CommandArgument" ?
Plus de sujets relatifs à : recupere ou mettre a jour un tableau de double dans une classe


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