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;
}