simple probleme sur les objets (je debute) - C++ - Programmation
Marsh Posté le 11-11-2002 à 20:43:30
et pourquoi pas faire un accesseur ?
getVehicule(int num);
Marsh Posté le 11-11-2002 à 21:02:59
Tetedeiench a écrit a écrit : et pourquoi pas faire un accesseur ? getVehicule(int num); |
qui retourne un objet de type vehicule???
jy avait pense , ca marchait bien le probleme c que ca ne fait que lire ... pas modifier les objets vehicule
Marsh Posté le 11-11-2002 à 21:46:26
Renvoie une référence :
vehicule& getVehicule(int num)
{
return tab[num];
}
Marsh Posté le 11-11-2002 à 21:49:35
Mais une question que je me suis souvent posée : puisqu'avec getVehicule on peut alors accéder comme on veut au membres du tableau, pourquoi ne pas carrément mettre le tableau en public?
Marsh Posté le 11-11-2002 à 23:13:39
Ace17 a écrit a écrit : Mais une question que je me suis souvent posée : puisqu'avec getVehicule on peut alors accéder comme on veut au membres du tableau, pourquoi ne pas carrément mettre le tableau en public? |
C'est pour séparer la partie interface de l'implémentation. Tu dois pouvoir utiliser ton objet sans savoir qu'il utilise un tableau. Ainsi, le jour où tu souhaiteras en changer (liste chainée, base de données...), tu ne change pas l'interface, ni les programmes qui l'utilisent.
Marsh Posté le 12-11-2002 à 01:59:14
Ace17 a écrit a écrit : Mais une question que je me suis souvent posée : puisqu'avec getVehicule on peut alors accéder comme on veut au membres du tableau, pourquoi ne pas carrément mettre le tableau en public? |
tu ne te soucies pas de savoir quand et comment il est construit, modifie, recalcule et tu peux faire le compte des gens qui ont des references vers cet objet..
d'une variable (chaque changement d'etat de l'objet necessite un recalcul couteux), plutot que de refaire le calcul a chaque fois, tu le fais qu'au moment ou tu dois utiliser la valeur et donc tu gagnes en temps de calcul:
Code :
|
Conclusion si tu avais eu acces directement a la valeur TransformedPosition tu aurais du faire le calcul deux fois (au moins dans cet exemple) apres chaque set.
Si tu fais ca:
Code :
|
tu es bloque avec ton implementation.
Alors que si tu avais eu un accesseur tu aurais eu largement le choix sur l'implementation:
Code :
|
Code :
|
L'interface est la meme, l'implantation est differente.
tu veux incrementer le compteur de reference a chaque fois que quelqu'un te demande un pointeur ou une reference sur un de tes objets. Evidemment ce n'est pas possible avec le membre public.
alors qu'avec l'accesseur:
Code :
|
Si Tata l'implemente sous forme d'un membre public, ce n'est pas possible. Par contre si Tata avait utilise un accesseur ce serait beaucoup plus simple.
Exemple:
Code :
|
Je n'ai pas mis de virtual mais ca depend l'utilisation que tu veux en faire.
LeGreg
Marsh Posté le 12-11-2002 à 02:10:38
Renvoyer une référence non-const et considérer que l'accesseur ne protège que des dépassements ?
Le conteneur héritant de son contenu est Une Maivais Idée©. Ça se comprends mieux avec les templates...
Code :
|
Marsh Posté le 12-11-2002 à 02:18:47
Citation : Le conteneur héritant de son contenu est Une Maivais Idée©. Ça se comprends mieux avec les templates... |
[OT]Vaut-il mieux un contenu heritant de son contenant?
Oh je crois que c'est un concept valide
puisqu'on dit "boire un verre" pour dire que l'on boit l'eau dans le verre.
Donc comme l'interface est un handle, on peut appliquer a eau et a verre les memes methodes.[/OT]
je divague..
LeGreg
Marsh Posté le 12-11-2002 à 02:33:20
en tout k merci jai encore progresse
jen demendais pas tant
Marsh Posté le 12-11-2002 à 10:17:15
chui perdu ... faudra me la refaire plus lentement avec les histoires de verres contenants contenus ds l'eau ...
Marsh Posté le 13-11-2002 à 04:01:24
legreg a écrit a écrit : Vaut-il mieux un contenu heritant de son contenant? |
[choper la perche]
Ah pardon cher confrère, je vous arrête là !
Dans ce cas-là, ce n'est qu'un simple transfert de propriété d'un contenu (eau) à son conteneur unitaire (verre).
L'eau étant une unité, et sa quantité une de ses propriétés.
Le conteneur n'ayant qu'un élément, on perd la notion de collection (on ne trie pas un verre), et il est alors logique d'accéder directement au contenu puisqu'il ne peut y avoir d'ambigüité sur l'élément concerné.
[/choper la perche]
A propos...
Il me semble qu'il manque au conteneurs C++ la distinction entre l'objet contenu et l'emplacement mémoire (case) qui le contient.
Je pense à l'échange d'éléménts entre liste chaînées, où on ne peut spécifier s'il faut copier/swapper les objets, ou juste rabouter des pointeurs.
Je dis ça de façon théorique, je ne me suis pas encore servi des conteneurs C++ sérieusement...
OT
Marsh Posté le 13-11-2002 à 05:14:40
Musaran a écrit a écrit : OT |
off-topic
(ou legerement diversion du sujet original)
LeGreg
Marsh Posté le 11-11-2002 à 19:51:01
au depart jai une classe vehicule du type suivant
jai cree une autre classe tabvehicule qui contient un tableau dobjet de type vehicule
bon le probleme est de pouvoir utilise le tableau vu quil est en private. comme solution jai pense a faire herite tabvehicule de vehicule de facon a quil ait les meme membres et fct et ensuite utiliser une fonction de tabvehicule pour associer le resultat ds le tableau (genre set(i) ou i est lindice, dans set yaurai un truc du genre tab[i]=..membredetabvehiculederive..)
voila le prob c que jarrive pas a ecrire ca et que ya peut etre dautre methodes plus simple pour resoudre le probleme
note : jai peut etre dit des conneries je debute en c++ (mais pas c ca, ca va )
Message édité par red faction le 11-11-2002 à 19:54:52