Wie behandeln Sie falsche Werte in einen Konstruktor?

Bitte beachten Sie, dass dies eine Frage stellen Konstruktoren, nicht über Klassen, die sich mit der Zeit.

Angenommen ich habe eine Klasse wie folgt aus:

class Time
{
protected:
    unsigned int m_hour;
    unsigned int m_minute;
    unsigned int m_second;
public:
    Time(unsigned int hour, unsigned int minute, unsigned int second);
};

Während ich möchte ein gebaut werden erfolgreich, ich würde wollen, dass der Konstruktor von b zu scheitern.

Time a = Time(12,34,56);
Time b = Time(12,34,65); //second is larger than 60

Dies ist jedoch nicht möglich, da Konstruktoren nicht wieder alle Werte und wird immer erfolgreich sein.

Wie würde der Konstruktor dem Programm sagen, dass es ist nicht glücklich? Ich dachte daran, ein paar Methoden:

  1. den Konstruktor eine exception werfen, und Handler im aufrufenden Funktion zu behandeln.
  2. eine Flagge in die Klasse und setzen Sie ihn auf "true" nur, wenn die Werte akzeptabel sind, indem Sie den Konstruktor, und das Programm überprüft das flag sofort nach dem Bau.
  3. haben eine separate (wahrscheinlich statisch) - Funktion aufrufen, um zu überprüfen, die input-Parameter, die unmittelbar vor dem Aufruf des Konstruktors.
  4. redesign der Klasse, so dass es sein kann, konstruiert aus jedem input-Parameter.

Welche dieser Methoden ist am häufigsten in der Industrie? Oder ist es etwas, was ich vielleicht vergessen habe?

InformationsquelleAutor Andy | 2009-07-21
Schreibe einen Kommentar