Retorno dos indicadores de erro das funções set da classe Time. Modifique as funções set na classe Time das Figuras 17.8 a 17.9 para retornar valores de erro apropriados se for feita uma tentativa de definir um dado-membro de um objeto da classe Time para um valor inválido. Escreva um programa que teste sua nova versão da classe Time. Mostre mensagens de erro quando as funções set retornam valores de erro.
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!! Bora para mais um exercício.
Nosso programa terá que ter uma classe definida Time.h que altera o tempo em um segundo e, em seguida exibe a hora antes do incremento de um segundo e após o incremento. O programa também deverá exibir a hora no formato universal (hora, minuto e segundo) e no formato AM ou PM.
Nosso programa também terá que fazer o tratamento de erro, caso os horários definidos estejam fora do padrão. Por exemplo definir um valor para horas, minutos e segundos negativos.
Passo 2
Vamos iniciar definindo nossa classe Time junto com as definições das funções:
/arquivo de cabeçalho
#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED
using namespace std;
#include
#include
//class Time
class Time{
public:
Time();
//construtor
Time(int, int =0 , int = 0);
//define as funções
void setTime(int, int ,int);
//define hora, minuto e segundo
void setHour (int);
void setMinute( int);
void setSecond(int);
//obtem o resultados
int getHour();
int getMinute();
int getSecond();
// hora de saida no formato universal
void printUniversal();
//hora de saida no formato padrão
void printStandard();
//função tick que muda o tempo a cada segundo
void tick();
private:
int hour; // formato de relogio 24 horas
int minute;//0 - 59
int second; // 0 -59
};
#endif
Passo 3
Após a definição da classe, precisar definir os parâmetros do construtor da classe e também das funções responsáveis por atribuir a hora, minuto, segundo e exibir os resultados na forma Universal e padrão e também do tratamento dos erros
/definindo os valores do construtor
Time :: Time(){
//função time aloca 0 para hora, minuto e segundo
setTime(0,0,0);
}
//construtor com os argumentos
//atribui os valores para hora, minuot e segundo
Time:: Time( int hr, int min, int sec){
setTime(hr,min,sec);
}
//definição da função setTime
void Time:: setTime(int h, int m, int s){
setHour(h);
setMinute(m);
setSecond(s);
}
//atribui a hora
//verifica se está entre 0 e 24
void Time:: setHour(int h){
if( h >= 0 && h
hour = h;
}
else{
cout
cout
cout
cout
hour = 0;
}
}
//atribui o minuto
//veirifca se está 0 e 60
//caso contrario acrescente mais 1 na hora
void Time:: setMinute(int m){
if (m >= 0 && m
minute = m;
}
else if( m > 60){
minute = m %60;
setHour((getHour() + 1));
}
else{
cout
cout
cout
cout
minute = 0;
}
}
//atribui o segundo
//atribui o minuto
//veirifca se está 0 e 60
//caso contrario acrescente mais 1 no minuto
void Time:: setSecond(int s){
if(s >= 0 && s
second = s;
}
else if( s > 60){
second = s % 60;
setMinute((getMinute() + 1));
}
else{
cout
cout
cout
cout
second = 0;
}
}
//retorna hora
int Time:: getHour(){
return hour;
}
//retorna minuto
int Time:: getMinute(){
return minute;
}
//retorna segundo
int Time:: getSecond(){
return second;
}
//formato universal HH :: MM: SS
void Time:: printUniversal()
{
cout
cout
}
//formato PM ou AM
void Time:: printStandard(){
cout
cout
}
//função tick incrementa o valor da varaivel segundo em 1 e altera a hora e os minutos
void Time:: tick(){
setTime(getHour(), getMinute(),(getSecond() + 1));
}
Passo 4
Agora vamos inicializar a função principal main(), criar o objeto da classe com um horário definido em 12:59:58, e um horário com valor negativos para testar se o tratamento de erro está correto, por fim realizar a chamada das funções para que seja incrementado um segundo e mostrar o resultado após o incremento:
int main(){
//objeto da classe Time
//hora, minuto e segundo
//exibe os valore
Time t1 (12, 59, 58);
//exibe os valore
cout
//chamada das funções
t1.printUniversal();
cout
t1.printStandard();
t1.tick();
//exibe os valore
cout
t1.printUniversal();
cout
t1.tick();
Time t2 (12, -59, 58);
t2.printUniversal();
cout
t2.printStandard();
return 0;
}
Passo 5
A saida do nosso programa será:

Portanto, programa está funcionando perfeitamente
E por hoje é só galera!!! Até o próximo exercício
Resposta
Código do programa:
//arquivo de cabeçalho
#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED
using namespace std;
#include
#include
//class Time
class Time{
public:
Time();
//construtor
Time(int, int =0 , int = 0);
//define as funções
void setTime(int, int ,int);
//define hora, minuto e segundo
void setHour (int);
void setMinute( int);
void setSecond(int);
//obtem o resultados
int getHour();
int getMinute();
int getSecond();
// hora de saida no formato universal
void printUniversal();
//hora de saida no formato padrão
void printStandard();
//função tick que muda o tempo a cada segundo
void tick();
private:
int hour; // formato de relogio 24 horas
int minute;//0 - 59
int second; // 0 -59
};
#endif
//definindo os valores do construtor
Time :: Time(){
//função time aloca 0 para hora, minuto e segundo
setTime(0,0,0);
}
//construtor com os argumentos
//atribui os valores para hora, minuot e segundo
Time:: Time( int hr, int min, int sec){
setTime(hr,min,sec);
}
//definição da função setTime
void Time:: setTime(int h, int m, int s){
setHour(h);
setMinute(m);
setSecond(s);
}
//atribui a hora
//verifica se está entre 0 e 24
void Time:: setHour(int h){
if( h >= 0 && h
hour = h;
}
else{
cout
cout
cout
cout
hour = 0;
}
}
//atribui o minuto
//veirifca se está 0 e 60
//caso contrario acrescente mais 1 na hora
void Time:: setMinute(int m){
if (m >= 0 && m
minute = m;
}
else if( m > 60){
minute = m %60;
setHour((getHour() + 1));
}
else{
cout
cout
cout
cout
minute = 0;
}
}
//atribui o segundo
//atribui o minuto
//veirifca se está 0 e 60
//caso contrario acrescente mais 1 no minuto
void Time:: setSecond(int s){
if(s >= 0 && s
second = s;
}
else if( s > 60){
second = s % 60;
setMinute((getMinute() + 1));
}
else{
cout
cout
cout
cout
second = 0;
}
}
//retorna hora
int Time:: getHour(){
return hour;
}
//retorna minuto
int Time:: getMinute(){
return minute;
}
//retorna segundo
int Time:: getSecond(){
return second;
}
//formato universal HH :: MM: SS
void Time:: printUniversal()
{
cout
cout
}
//formato PM ou AM
void Time:: printStandard(){
cout
cout
}
//função tick incrementa o valor da varaivel segundo em 1 e altera a hora e os minutos
void Time:: tick(){
setTime(getHour(), getMinute(),(getSecond() + 1));
}
int main(){
//objeto da classe Time
//hora, minuto e segundo
//exibe os valore
Time t1 (12, 59, 58);
//exibe os valore
cout
//chamada das funções
t1.printUniversal();
cout
t1.printStandard();
t1.tick();
//exibe os valore
cout
t1.printUniversal();
cout
t1.tick();
Time t2 (12, -59, 58);
t2.printUniversal();
cout
t2.printStandard();
return 0;
}