Ajouter un commentaire

fredericmazue

Quote:
Y a til des erreurs?

Oui quelques unes...

Quote:

métode .affname_region() et
je ne comprends pas pourquoi ?

L'erreur est avant car tu n'appelles pas le contructeur de l'objet comme il faudrait. De plus ville n'a pas de constructeur sans argument dans ton code, alors le compilateur tousse.
Il faudrait:
ville ville1(regiona, villea, tabtp);

Maintenant il y a une subtilité subtile. Pourquoi le compilateur ne tousse-t-il pas d'emblée à la ligne
ville ville1();
puisque le onstructeur par défaut est absent ?
La réponse est que là, il ne vois même pas une instanciation d'objet mais un protoype de fonction :lol:

Ton code ne peux absolument pas marcher:
temperature[12]= tabtemperature[12];
Ne fonctionne pas. C++ n'affecte pas les tableaux.
Tu peux utiliser la fonction memcpy pour copier le contenu d'un tableau dans un autre.
Mais le mieux est encore d'utiliser vector plutôt que les tableaux de style C. Et il est possible d'affecter un vector dans un autre :)

Tu devrais préférer cin.get(); à system("PAUSE");

Ton programme fuit :)

region *m_region; L'objet m_region instancié par new dans le constructeur n'est jamais libéré. tu peux corriger ainsi

#include <memory>
auto_ptr<region> m_region;

et réécrire le constructeur de ville
ville::ville(string name_region, string name_ville, double tabtemperature[12] ) : m_region(0)
{
  // Attention c'est toujours faux là :)
  //temperature[12]= tabtemperature[12];
     
  m_region.reset(new region(name_region,name_ville));             
                   
}


Tu devrais éviter de passer des objets par valeur. Si je reprends le même constructeur

ville::ville(string name_region, string name_ville, // etc

Ici lors de l'appel du constructeur les objets string name_region et name_ville sont dupliqués à partir des argument originaux. Ca ne sert à rien ici car les copies des objets sont ensuite détruites (automatiquement). Mais la copie est coûteuse en mémoire et temps d'exécution.
Comme ici la copie n'est pas souhaitable, il faut passer les objet par référence seulement, comme ceci:

ville::ville(string& name_region, string& name_ville, // etc

De plus le constructeur ne modifie pas les arguments, donc il est bien mieux de les déclarer constants. Je te passe les détails, mais disons que ça laisse les coudées franches au compilateur pour faire des optimisations, et que c'est une bonne pratique pour écrire un code plus sûr, donc finalement:

ville::ville(const string& name_region, const string& name_ville, // etc

Principe à appliquer partout où ça s'applique dans ton code, c'est à dire en beaucoup d'endroit.

Bon je n'ai pas tout dit, faute de temps, mais ça te donne déjà du grain à moudre :)

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 L     III  H  H  U   U   AA  
L I H H U U A A
L I HHHH U U AAAA
L I H H U U A A
LLLL III H H UUU A A