Comment faire pour qu'un objet soit global

Comment faire pour qu'un objet soit global - C++ - Programmation

Marsh Posté le 12-06-2004 à 05:11:00    

Bonsoir, ou plutot bonjour
 
j'ai un petit probleme
 
je voudrais savoir comment faire pour qu'un objet qu'on instancie dans une fonction soit accessible dans tout le programme..
 
jexplique mon prob  
 
dans mon main() j'ai un premier menu avec un switch dessus
sur le cas1 japelle une fonction qui maffiche un deuxieme menu
dans ce deuxieme menu je choisi le type de vehicule que je veux créer
une fois le choix fait, j'ai un switch qui apelle  la fonction corespondante au choix
 
par exemple le choix1 apelle une fonction qui va me demander la saisie des infos pour un utilitaire et apeller le constructeur particulier
 
l'objet sera donc accessible que dans cette fonction mais dès quon en sort il meurt...
 
or je voudrais y accéder dans le main()  
 
Merci d'avance
 
 
(je suis un gros noob en c++ :cry: )


Message édité par pinpoy le 12-06-2004 à 05:12:15
Reply

Marsh Posté le 12-06-2004 à 05:11:00   

Reply

Marsh Posté le 12-06-2004 à 07:51:54    

Tu t'y prends mal.
La durée de vie d'une variable est entierement déterminée par l'endroit ou elle est déclarée. Si tu déclares un objet dans le corps d'une fonction il ne pourra pas etre global.
Tu dois utiliser un pointeur de type vehicle ( la classe de base ) qui lui doit etre global. Dans ton menu, tu fais des new avec le type correspondant. Exemple :
 
 

Code :
  1. Vehicule* g_Vehicule;
  2. void Choisir()
  3. {
  4.     // ........
  5.     switch(i)
  6.     {
  7.     case 1:
  8.          g_Vehicule = new Camion;
  9.          break;
  10.     case 2:
  11.          g_Vehicule = new Voiture;
  12.          break;
  13.     case 3:
  14.          g_Vehicule = new Ferrari;
  15.          break;
  16.     }
  17. }


Message édité par Ace17 le 12-06-2004 à 07:54:20
Reply

Marsh Posté le 12-06-2004 à 09:28:12    

une enum bordel :o
 
et le singleton bordel :o

Reply

Marsh Posté le 12-06-2004 à 09:34:52    

mais putain c'est juste pour lui montrer! Evidemment qu'il faut pas utiliser une fonction globale et encore moins des nombres magiques... mais je vais pas m'emmerder a lui pondre du code irréprochable alors que je veux juste lui faire comprendre le principe d'une fabrique!  
Le code que j'ai posté n'est en aucun cas destiné a etre copié-collé et encore moins compilé!


Message édité par Ace17 le 12-06-2004 à 09:35:12
Reply

Marsh Posté le 12-06-2004 à 09:35:48    

ben ne lui montre pas quelque chose de mauvais, abstiens toi

Reply

Marsh Posté le 12-06-2004 à 10:07:31    

y a deja eu un thread sur le singleton ou j'ai donner du code.

Reply

Marsh Posté le 12-06-2004 à 10:12:51    

Taz a écrit :

ben ne lui montre pas quelque chose de mauvais, abstiens toi


mauvais? oui, il est clair que je ne me permettrais pas d'écrire du code comme ca dans un quelconque projet.
Maintenant, mon but, c'est pas de lui écrire du code a sa place, c'est de lui faire comprendre l'idée qu'il y a derriere ce code. Et en ce sens, ce code n'est pas mauvais.
Apres c'est juste une question de savoir s'il faut donner du code pret a l'emploi ou s'il faut laisser l'autre chercher un peu.


Message édité par Ace17 le 12-06-2004 à 10:13:50
Reply

Marsh Posté le 12-06-2004 à 10:18:55    

et ben il a rien compris justement. ton code est mauvais, exemple ou pas. ça sert à rien de passer d'une erreur à une autre.

Reply

Marsh Posté le 12-06-2004 à 10:22:18    

Bon, ben dans ce format la, ca te convient mieux?
 
Debut fonction de création de vehicules
          faire un switch sur le type de véhicule désiré
          instancier un objet en utilisant new (type de véhicule désiré)
          renvoyer l'addresse de ce nouvel objet a l'appelant
Fin fonction de création de vehicules


Message édité par Ace17 le 12-06-2004 à 10:27:45
Reply

Marsh Posté le 12-06-2004 à 10:24:44    

et la variable globale ça parait de bon aloi ?

Reply

Marsh Posté le 12-06-2004 à 10:24:44   

Reply

Marsh Posté le 12-06-2004 à 10:27:10    

LOL [:rofl]
C'est vrai, j'ai oublié celle la! Je corrige

Reply

Marsh Posté le 12-06-2004 à 10:59:40    

N'empeche que... a la relecture du titre du topic, je comprends pourquoi j'avais fait cette "erreur". Apres tout, c'est ce qu'il voulait!

Reply

Marsh Posté le 12-06-2004 à 13:11:53    

merci de toutes vos réponses
 
en fait je my étais pris comme un pieds
 
javais définis  

Code :
  1. utilitaire *util1=new utilitaire(vol, kg, num, mar, nom, poids, km);

 dans la méthode void ini_ut(); qui est apelé dans le sous-menu
 
je vais rectifier ca
 
EDIT Forcément ca marche bcp mieux lol, par contre quand en me levant j'ai vu que vous parliez de singleton pour mon petit probleme j'étais  :whistle: pas rassuré


Message édité par pinpoy le 12-06-2004 à 13:30:21
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed