begin process at 2012 05 29 15:44:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

PETITE QUESTION : Objet, pointeur ou référence????


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

PETITE QUESTION : Objet, pointeur ou référence????

mercredi 28 juillet 2010 à 13:58:53 | PETITE QUESTION : Objet, pointeur ou référence????

eupeup

Bonjour à tous,

j'ai une petite question, et si quelqu'un pouvait me répondre se serait sympa...

Donc en fait j'ai une classe contenant diverse choses, et notamment une méthode...
Dans cette méthode je fais appel à des différents objets de classe... donc ma question est la suivante, dans le corps d'une fonction est-il préférable de créer :
- un pointeur sur mon objet
(classeObjet objet* = new classeObjet(arg...);)
- une référence sur l'objet
(classeObjet &objet = classeObjet(arg,...);)
- ou tout bêtement l'objet directement
(classeObjet objet(arg,...);)

Merci d'avance

Peupeu
mercredi 28 juillet 2010 à 14:35:25 | Re : PETITE QUESTION : Objet, pointeur ou référence????

CptPingu

Administrateur CodeS-SourceS
L'objet lui même quelque soit l'endroit où tu es, sans hésitation.

________________________________________________________________________
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
mercredi 28 juillet 2010 à 14:51:22 | Re : PETITE QUESTION : Objet, pointeur ou référence????

eupeup

Ok, merci pour ta réponse....
Donc j'ai bien compris, quelque soit l'endroit où je suis...

Mais je vais être bête une dernière fois, si par hasard j'ai une classe dont l'un des arguments membres est un objet, on met aussi l'objet direct?
Je suis désolé de rebondir, car c'est typiquement ce que je fais, comme dans le bout de code ci-joint... du coup je redemande histoire de pas modifier tout mon code pour rien....

Par exemple, typiquement je fais un truc dans le genre :

class CObjet
{
public :

CObjet::CObjet(); // const de défaut
CObjet::CObjet(const CObjet &objet); // const de copie
CObjet::CObjet(const CAutreObjet &autreObjet) // constructeur
{
_autreObjet = new CAutreObjet(autreObjet);
};
CObjet::~Cobjet() {delete _autreObjet;}; // destructeur

private :
CAutreObjet* _autreObjet;
...
}

Merci d'avance
mercredi 28 juillet 2010 à 15:04:31 | Re : PETITE QUESTION : Objet, pointeur ou référence????

CptPingu

Administrateur CodeS-SourceS
Là, en revanche, pour un attribut de classe, ça dépend.

Si c'est un objet qui doit être dupliqué, alors tu mets l'objet. Ex: std::string.
Code C/C++ :
class Objet
{
public :
Objet()
{
}

void setObject(const std::string& autreObjet)
{
  _autreObjet = autreObjet;
}
~Objet() {};

private :
 std::string _autreObjet;
}


Si c'est un objet dont tu dois juste avoir une référence dessus, donc pas de copie de celui-ci, alors tu mets un pointeur.
Si tu ne fais que pointer dessus, ce n'est pas à toi de détruire la chaîne.
Code C/C++ :
class Objet
{
public :
Objet()
 : _autreObjet(0)
{
}

void setObject(const autreObjet& autreObjet)
{
  _autreObjet = autreObjet;
}
~Objet() {};

private :
 AutreObjet* _autreObjet;
}


Si c'est un objet essentiel à la construction de la classe, tu peux utiliser une référence:
Code C/C++ :
class Objet
{
public :
Objet(const AutreObjet& autreObjet)
 : _autreObjet(autreObjet);
{
  
}
~Objet() {};

private :
 AutreObjet& _autreObjet;
}


Tu peux mettre un pointeur (et donc gérer la destruction de celui-ci), si tu ne peux faire autrement.
Ex: Construction d'une classe mise en attribut en dehors du constructeur.

Code C/C++ :
class Objet
{
public :
Objet()
 : _autreObjet(0) // On l'initialise tout de même !
{
}

void setObject(int nb)
{
  delete _autreObjet;
  _autreObjet = new autreObjet(nb);
}

~Objet() { delete _autreObjet;};

private :
 AutreObjet* _autreObjet;
}



Ce n'est pas une règle d'or, et il y a sûrement des cas particuliers. Mais d'une manière générale, dès que tu peux éviter les pointeurs (et les new/delete) fait le !

________________________________________________________________________
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
mercredi 28 juillet 2010 à 15:23:59 | Re : PETITE QUESTION : Objet, pointeur ou référence????

eupeup

Super!!!
Merci pour ta réponse!!!
mercredi 28 juillet 2010 à 16:11:51 | Re : PETITE QUESTION : Objet, pointeur ou référence????

DeAtHCrAsH

Salut,

je viens completer ces réponses de manière plus générique.
Les règles de base à suivre sont les suivantes :

1) Si un objet a pour vocation d'etre passé a une fonction, il faut le passer en pointeur si et seuleument cet objet fait plus de 4bytes, soit la taille d'un pointeur. La raison est simple. Si tu as un objet complexe dont la taille est supérieure à 4 bytes, tu vas de ce fait surcharger la pile pour rien et donc detériorer les performance de ton application.

typedef struct {
int age;
int taille;
} MYSTRUCT, *PMYSTRUCT;

sizeof(MYSTRUCT) => 8 bytes

PMYSTRUCT pMyObject;
sizeof(pMyObject) => 4 bytes

===> Tu comprends donc que tu as tout intéret a passer l'object par pointeur s'il est destiné a être utilisé en paramètre d'autres fonctions.

2) Que tu utilises des pointeurs ou des référence cela est "strictement identique". La seule différence entre les deux est que la référence est fixe une fois initialisée. A l'inverse un poiteur peut être déplacé!


Shell
mercredi 28 juillet 2010 à 17:03:19 | Re : PETITE QUESTION : Objet, pointeur ou référence????

eupeup

Ok, j'ai bien compris...
D'ailleurs ca me fait penser à une autre question....
A propos de la pile et du tas....

J'ai compris que lorsqu'on appelle une fonction, les arguments de celle ci sont copiés dans la pile, comme tu l'as souligné dans ton message...

Mais qu'en est-il du tas? dans quel cas il est utilisé?

peupeu
mercredi 28 juillet 2010 à 17:54:25 | Re : PETITE QUESTION : Objet, pointeur ou référence????

DeAtHCrAsH


La pile (stack) correspond a de la mémoire paginée par "tranche" de 4ko qui sert aux allocation temporaires tel que le passage de pointeur, l'utilisation de variable locale non static a une fonction, ... La pile est donc "ephémère". La pile est accedé selon le principe de LIFO (last in first out).

A l'inverse le tas est alloué au démarrage du programme et sa taille est fixe si je ne me trompe pas. Il est utilisé pour l'allocation de zone mémoire via new, malloc, ...

Shell
mercredi 28 juillet 2010 à 17:55:53 | Re : PETITE QUESTION : Objet, pointeur ou référence????

eupeup

Ok, merci pour ta réponse!!!


Cette discussion est classée dans : objet, référence, question, pointeur, classeobjet


Répondre à ce message

Sujets en rapport avec ce message

problème de pointeur et d'objet pointé [ par leptit ] Bonjour, Je vous présente le problème en C:struct assoc { int l, *n ; }*n est un pointeur vers une alloc dynamique de memoirestyle tableau d'entier.Je Probleme de Débutant [ par Dorgendubal ] Hello à tous,j'ai déjà programmé en C++ et même avec des envirronements graphiques (comme QT sous linux) mais jamais avec Visual C++.Alors j'ai un pro question simple pointeur fseek fread [ par hvb ] hello tous, voila je connais vraiment pas tres bien le C, et je dois analyser un code pour le retranscrire en vb.net ou delphi.ma question est la suiv Pointeur et référence [ par kawazaki ] Bonjour je commence a programmer en c++ je voudrais comprendre quand j'utilise les pointeurs et les références ainsi que les déclarations:*var**var&va Structure et objet [ par Suisse00 ] Bonjours ! Sauf si je me trompe l'utilisation des objet avec des structure devien une structure dynamic ? Si ses le cas voilà la question sinon commen Pointeur ou référence? [ par vecchio56 ] En terme de performances, est-il plus couteux de passer un paramètre par référence plutot qu'un pointeur, pour appeler une fonction?Merci Simple question [ par DeAtHCrAsH ] J'ai un pointeur sur une chaine de caractère.Comment plcer le pointeur a la fin de la chaine sans passer par une boucle du genre:char *pString = "Simp question sur les pointeur et tableau et matrice [ par Battousai ] bonjour a tous,ma question se porte comme indiqué si dessus sur l'utilisation des pointeur avec les tableau et surtout les matrices ou plus.d'abord j' PROB avec pointeur THIS [ par jfk20004 ] Salut,tout ce que je sais à propos du pointeur this:-c'est un pointeur sur l'adresse d'un objet-il permet des appels en cascade de fonctionsquelqu'un test du pointeur [ par jeltimed ] bonjour .en fait je suis débutant en c++ et je voulais juste savoir est ce que ya moyen d'appliquer la logique suivant en c++: si pointeur pointe


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 : 1,061 sec (3)

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