begin process at 2012 05 29 02:46:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Différence entre déclarations d'objet


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Différence entre déclarations d'objet

lundi 27 septembre 2010 à 11:27:06 | Différence entre déclarations d'objet

skeleton18

Salut à toutes et à tous,

Je ne suis pas vraiment un débutant en C++, mais j'ai une question de débutant...

J'ai défini une classe Test comme ceci :

Code C/C++ :
#ifndef _TEST_H
#define _TEST_H

class Test {
  int _a;
  int _b;

 public:
  Test(int a = 0, int b = 0);
  ~Test();
  inline int a() const { return _a; };
  inline void a(const int & a) { _a = a; };
  inline int b() const { return _b; };
  inline void b(const int & b) { _b = b; };
  void test (const Test & t);
};

#endif /* _TEST_H */


J'ai ensuite fait un main() qui ressemble à ça :
Code C/C++ :
int
main(int argc, char ** argv) {
  Test * t1 = new Test(2, 2);
  Test * t2 = new Test();
  Test t3(32,41);
  
  std::cout << "t1 : a = " << t1->a() << " et b = " << t1->b() << std::endl;
  std::cout << "t2 : a = " << t2->a() << " et b = " << t2->b() << std::endl;
  std::cout << "t3 : a = " << t3.a() << " et b = " << t3.b() << "\n" << std::endl;
 
  t2->a(3); t2->b(4);

  std::cout << "t1 : a = " << t1->a() << " et b = " << t1->b() << std::endl;
  std::cout << "t2 : a = " << t2->a() << " et b = " << t2->b() << std::endl;
  std::cout << "t3 : a = " << t3.a() << " et b = " << t3.b() << "\n" << std::endl;

  t2->test(*t1);

  std::cout << "t1 : a = " << t1->a() << " et b = " << t1->b() << std::endl;
  std::cout << "t2 : a = " << t2->a() << " et b = " << t2->b() << std::endl;
  std::cout << "t3 : a = " << t3.a() << " et b = " << t3.b() << "\n" << std::endl;

  return EXIT_SUCCESS;
}


Et je ne me rappelle plus qu'elle est la différence entre déclarer un objet à la façon de t1 et celle de t3.

Toute aide est la bienvenue.
Merci
lundi 27 septembre 2010 à 15:04:59 | Re : Différence entre déclarations d'objet

Julien39

Membre Club Administrateur CodeS-SourceS
Le souvenir est un peu loin mais il me semble que quand tu fais Test * t1 = new Test(2, 2); il crée d'abord un objet vide puis ensuite il le remplace par Test(2, 2)

La manière pour t3 est donc la plus appropriée.
lundi 27 septembre 2010 à 15:19:29 | Re : Différence entre déclarations d'objet

CptPingu

Administrateur CodeS-SourceS
L'un (t1) crée un allocation dynamique qui devra être libérée à l'aide de "delete".
L'autre (t3) crée un élément sur la pile en local. Sa libération est automatique.

La version deux (t3) est à préférer dans le cas que tu présentes.
La version 1 (t1) est utile dans certains cas (héritage polymorphique, liste ou vecteur d'objet, éviter la copie, etc...).

@Julien39: L'objet n'est pas crée "vide" puis remplacé. Il est crée normalement en passant par le constructeur dans les deux cas. C'est juste que dans le premier cas, on doit gérer soi même la destruction de l'objet.

D'une manière générale, la première solution est toujours à privilégier si les deux écritures sont équivalentes.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 27 septembre 2010 à 15:25:13 | Re : Différence entre déclarations d'objet

skeleton18

Merci pour vos réponses.

L'exemple que j'ai donné là, n'est qu'un exemple de test. Je voulais me rafraîchir la mémoire sur le passage des objets par référence.

Ca remonte à loin, surtout quand on a fait que du Java ou du C entre temps.

@CptPingu : Par contre, une autre petite question suite à ton message. Si jamais j'ai un vecteur d'objets Test à faire, il vaut mieux que je le déclare comme :
Code C/C++ :
std::vector<Test *> _vecTest;

J'ai bien compris?
lundi 27 septembre 2010 à 15:36:38 | Re : Différence entre déclarations d'objet

CptPingu

Administrateur CodeS-SourceS
Ça dépend :)

Si tu as un tableau d'objet qui ne va pas être copié, dont les éléments ne sont pas lourds, qui ne nécessite pas de tri, alors je te conseille un:
std::vector<Test> _vecTest;

Si tu as un tableau que tu comptes copier (sans pour autant copier toutes les valeurs de chacune des cases avec), ou qui comporte de gros objets, ou que tu souhaites trier à l'aide un std::sort, alors je te conseille un:
std::vector<Test*> _vecTest;

C'est au cas par cas, mais dans le doute, utilise un: std::vector<Test*> _vecTest;

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question


Cette discussion est classée dans : int, test, const, std, t3


Répondre à ce message

Sujets en rapport avec ce message

Exporter une classe dans une DLL... [ par Clovis ] Salut,Je voudrais pouvoir exporter dans une DLL, si c'est possible, les fonctions et les objets du listing suivant. Car, je voudrais, par la suite pou Hexadécimal HELP ! [ par Xentor ] Bonjour,Mon problème est le suivant : je vient d'effectuer un AND sur une variable, et celle ci, bien que conservant son type unsigned int se met en h Format de données [ par leskritiques ] Voici le programme que je veux modofier :#include "chaine.h"#include "entreeSortie.h"#include "chaine.cpp"#include "entreeSortie.cpp"int pgcd (const i ProB avec la fonction int remove (const char*) [ par Avalon10101 ] _-=AvAloN=-_Jai un petit prob avec cette fonction :Je cré mon prog il na aucune erreur é il est donc pré à etre exécuter pour suprimer un fichier test Tableau avec new [ par Dalamar ] bonjour, je suis incapable de créer un tableau multidimentionnel avec une fonction:TileEngine::TileEngine(const int w, const int h) { nTiles = w * h; Probleme avec le "linker" [ par Darkneon ] Salut,J'ai 3 fichiers comme ceciTest.cpp#include "test.h"#include void PrintA(int num){ for(int i=0; i<num; i++ Convertion "15"(string) --> 15(int) [ par crocejf2000 ] (Re)SalutIl faut que je test ma chaine et que je la convertisse si je peut. Avec atoi("12"), ca me donne bien 12, mais si je fait un atoi("12hach"), c gcc, prob de compilation [ par Metrox ] 'lut all, je tourne ss une debian (knoppix, pr etre precis), et j'essaie de compiler un truc tt bete, mais il me sort une erreur...que faire?!?CODE(es Pointeurs [ par ph0ton ] salut,j'ai beaucoup de mal a ecrire des pointeurs correctement, et j'aurai besoin de l'avis d'un connaisseur pour savoir si ce que j'ai ecrit est corr Problème avec for [ par Scientophage ] J'ai un gros problème avec l'instruction for quand je tapeint test[5];for (int a=0; a==4; a++){ test[a]=a; coutCa ne m'affiche rien et en plus


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales