Aperfeiçoamento da classe Time. Modifique a classe Time das figuras 17.8 e 17.9 para incluir uma função- -membro tick que incremente a hora armazenada em um objeto Time em um segundo. O objeto Time sempre deverá permanecer em um estado coerente. Escreva um programa que teste a função-membro tick em um loop que imprima a hora no formato-padrão durante cada iteração do loop para mostrar que a função-membro tick funciona corretamente. Não se esqueça dos testes para:

a) Incrementar para o próximo minuto.

b) Incrementar para a próxima hora.

c) Incrementar para o próximo dia (ou seja, de 11:59:59 PM a 12:00:00 AM).

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.

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:

//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){

hour = (h >= 0 && h

}

//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{

minute = m %60;

setHour((getHour() + 1));

}

}

//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{

second = s % 60;

setMinute((getMinute() + 1));

}

}

//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

}

//formato PM ou AM

void Time:: printStandard(){

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 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.printStandard();

t1.tick();

//exibe os valore

cout

t1.printUniversal();

cout

t1.printStandard();

t1.tick();

//exibe os valore

cout

t1.printUniversal();

cout

t1.printStandard();

t1.tick();

return 0;

}

Passo 5

A saída 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){

hour = (h >= 0 && h

}

//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{

minute = m %60;

setHour((getHour() + 1));

}

}

//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{

second = s % 60;

setMinute((getMinute() + 1));

}

}

//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

}

//formato PM ou AM

void Time:: printStandard(){

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.printStandard();

t1.tick();

//exibe os valore

cout

t1.printUniversal();

cout

t1.printStandard();

t1.tick();

//exibe os valore

cout

t1.printUniversal();

cout

t1.printStandard();

t1.tick();

return 0;

}