Bonjour,

J'ai un problème avec le code suivant (programme qui cree des objets de classe TIME pour stocker et afficher une heure sous la fome hh:mm:ss) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <iomanip>
 
using namespace std;
 
class Time
{
   private :
 
   int m_hours;
   int m_minutes;
   int m_secondes;
 
   public :
 
   Time (float hours)
   {
      m_hours = (int) hours;
      m_minutes = (int) ((hours - m_hours) * 60);
      m_secondes = 0;
   }
 
   Time (int hours = 0, int minutes = 0, int secondes = 0) :
         m_hours (hours), m_minutes (minutes), m_secondes (secondes)
   {
      cout << "constructeur 3 arguments " << endl;
   }
 
   Time (const Time &t)
   {
      if (t.m_hours >= 0 && t.m_hours < 24)
      {
         if (t.m_minutes >= 0 && t.m_minutes < 60)
         {
            if (t.m_secondes >= 0 && t.m_secondes < 60)
            {
               m_hours = t.m_hours;
               m_minutes = t.m_minutes;
               m_secondes = t.m_secondes;
 
               cout << "Constructeur de copie " << endl;
            }
            else
            {
 
               cout << "error" << endl;
            }
         }
         else
         {
            cout << "error" << endl;
         }
      }
      else
      {
         cout << "error" << endl;
      }
   }
 
   void display ()
   {
      cout << setfill ('0') << setw (2) << m_hours
           << ":" << setw (2) << m_minutes
           << ":" << setw (2) << m_secondes << endl;
   }
};
 
Time func ()
{
   Time tmp (33,33,33);
 
   return tmp;
}
 
int main ()
{
   Time t1;
 
   t1.display ();
 
   t1 = func ();
 
   t1.display ();
 
   return EXIT_SUCCESS;
}
normalement mon constructeur de copie affiche un message d'erreur si je ne mets pas une heures valide (sous la forme 00:00:00), or dans cette fonction qui retourne un objet de la classe Time je fais une initialisation non valide (33:33:33) (jusque là rien d'anormal vu que mon constructeur ne fais pas de vérification).

par contre quand je fais

t1 = func ();

normalement là il devrait y avoir appel du constructeur de copie (et donc affichage du message d'erreur), or rien du tout t1 recçoit les valeurs 33:33:33
et pas d'erreur.

je comprends pas ce qui cloche )