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;

}