Si prega di notare che si tratta di una domanda sui costruttori, non sulle classi che gestiscono il tempo.Come gestire valori errati in un costruttore?
Supponiamo che io ho una classe come questa:
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);
};
Mentre io vorrei una da costruire con successo, vorrei il costruttore di b per sicuro.
Time a = Time(12,34,56);
Time b = Time(12,34,65); // second is larger than 60
Tuttavia, questo non è possibile, perché i costruttori non restituiscono alcun valore e sarà sempre successo.
Come potrebbe il costruttore dire al programma che non è felice? Ho pensato ad alcuni metodi:
- fare in modo che il costruttore lanci un'eccezione e abbia gestori nella funzione di chiamata per gestirlo.
- avere un flag nella classe e impostarlo su true solo se i valori sono accettabili dal costruttore e fare in modo che il programma controlli il flag immediatamente dopo la costruzione.
- hanno una funzione separata (probabilmente statica) da chiamare per verificare i parametri di input immediatamente prima di chiamare il costruttore.
- ridisegnare la classe in modo che possa essere costruita da qualsiasi parametro di input.
Quale di questi metodi è più comune nell'industria? O c'è qualcosa che potrei aver perso?
possibili duplicati di [Come gestire l'errore nel costruttore in C++?] (Http://stackoverflow.com/questions/4989807/how-to-handle-failure-in-constructor-in-c) –