Combinação das classes Time e Date. Combine a classe Time modificada do Exercício 17.7 e a classe Date modificada do Exercício 17.8 em uma classe chamada DateAndTime. (No Capítulo 20, discutiremos a herança, que nos permite realizar essa tarefa rapidamente, sem modificar as definições de classe existentes.) Modifique a função tick para chamar a função nextDay se a hora incrementar para o dia seguinte. Modifique as funções printStandard e printUniversal para mostrar a data e a hora. Escreva um programa para testar a nova classe DateAndTime. Especificamente, teste o incremento da hora para o dia seguinte.
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!! Bora para mais um exercício.
Vamos criar um programa que contenha uma classe chamada DateAndTime responsável por retornar uma data e a hora definida, a classe deverá conter algumas funções responsáveis por exibir a data e a hora no formato universal, no formato AM ou PM para a hora definida e incrementar os segundo na hora.
Passo 2
Vamos iniciar definindo os arquivos de cabeçalho e a classe DateAndTime com os namespace necessários:
//arquivo de cabeçalho
#ifndef TIMEANDDATE_H_INCLUDED
#define TIMEANDDATE_H_INCLUDED
using namespace std;
#include
#include
//declarando a classe
class DateAndTime{
public:
//constrturo da classe com os argumentos
DateAndTime(int = 2012, int =1, int = 0, int = 0, int = 0, int = 0);
//função data
void setDate(int, int ,int);
//definindo dia, mes , ano
void setDay(int);
void setMonth(int);
void setYear(int);
//retorna os valores dia, mes, ano
int getDay();
int getMonth();
int getYear();
//função para definir a hora
void setTime(int, int ,int);
//definindo hora, minuto e segundo
void setHour(int);
void setMinute(int);
void setSecond(int);
// retorna hora, minuto e segundo
int getHour();
int getMinute();
int getSecond();
//exibe no formato universal
void printUniversal();
//exibe no formato AM ou PM
void printStandard();
//função para incrementar o segundo
void tick ();
private:
//variaveis
int hour;
int minute;
int second;
int month;
int day;
int year;
};
#endif
Passo 3
Após definir a classe, vamos inicializar o construtor da classe com seus argumentos junto com as funções que irão retornar a data e a hora e exibir o resultado nos formato requisitados. Cada função contém uma verificação se os valores estão dentro do parâmetro correto. Por exemplo, o valor do mês deverá estar dentro do intervalo 1 e 12, o valor do ano deverá estar dentro do intervalor de 0 e 24.
// construtor da classe com os argumento
//garante que os objetos comecem com os valores corretos
DateAndTime:: DateAndTime(int yr, int mo, int da, int hr, int min, int sec){
//definir data
setDate(yr, mo, da);
//definir hora
setTime(hr, min, sec);
}
//definir hora, minuto e segundo
void DateAndTime:: setTime(int h, int m, int s){
setHour(h);
setMinute(m);
setSecond(s);
}
//definir dia, mes , ano
void DateAndTime:: setDate(int d, int m ,int y){
setDay(d);
setMonth(m);
setYear(y);
}
//define a hora
//verifica o intervalo entre 0 e 24 horas
void DateAndTime:: setHour(int h){
if( h >= 0 && h
hour = h;
}
else{
hour = 0;
setDay(getDay() + 1);
}
}
//verifica o minuto entre 0 e 60 minutos
void DateAndTime :: setMinute( int m){
if(m >= 0 && m
minute = m;
}
else{
minute = m % 60;
setHour((getHour()+ 1));
}
}
//verifica o segundo entre 0 e 60 segundos
void DateAndTime:: setSecond( int s){
if(s >= 0 && s
second = s;
}
else{
second = s % 60;
setMinute((getMinute() + 1));
}
}
//define o ano
void DateAndTime:: setYear(int y){
year = y;
}
//define o mes e verifica se esta entre 1 e 12
void DateAndTime:: setMonth(int m){
if(m >= 1 && m
month = m;
}
else{
month = 1;
setYear((getYear() + 1));
}
}
//define o dia
//vericia se esta entre 0 e 30 dias
void DateAndTime:: setDay(int d){
if( d >= 1 && d
day = d;
}
else{
day = 1;
setMonth((getMonth() + 1));
}
}
//retorna hora, minuto e segundo
// dia, mes e ano
int DateAndTime:: getHour(){
return hour;
}
int DateAndTime:: getMinute(){
return minute;
}
int DateAndTime:: getSecond(){
return second;
}
int DateAndTime:: getDay(){
return day;
}
int DateAndTime:: getMonth(){
return month;
}
int DateAndTime:: getYear(){
return year;
}
//exibe no formato universal a data e a hora
void DateAndTime:: printUniversal(){
cout
}
//exibe a data e a hora no formato PM ou AM
void DateAndTime:: printStandard(){
cout
}
//função para incrementar os segundos na hora
void DateAndTime:: tick(){
setTime(getHour(), getMinute(),(getSecond() + 1));
}
Passo 4
Agora precisamos inicializara função principal main() e definir os objetos da classe DateAndTime. A data definida será 15/02/2022 e a hora 23:59:50. Em seguida vamos usar um for para chamar a função tick() responsável por incrementar os segundo na hora e exibir o resultado.
int main(){
int loop;
//definindo os objetos da classe
DateAndTime dat(15, 02, 2022, 23,59,50);
cout
cout
dat.printUniversal();
cout
dat.printStandard();
//loop para incrementar os segundos
//exibe resultado
for(loop = 1; loop
dat.tick();
cout
dat.printUniversal();
cout
dat.printStandard();
}
return 0;
}
Passo 5
A saída do nosso programa será:
E assim finalizamos mais um exercício galera!!!! Até o próximo
Resposta
Código do programa:
//arquivo de cabeçalho
#ifndef TIMEANDDATE_H_INCLUDED
#define TIMEANDDATE_H_INCLUDED
using namespace std;
#include
#include
//declarando a classe
class DateAndTime{
public:
//constrturo da classe com os argumentos
DateAndTime(int = 2012, int =1, int = 0, int = 0, int = 0, int = 0);
//função data
void setDate(int, int ,int);
//definindo dia, mes , ano
void setDay(int);
void setMonth(int);
void setYear(int);
//retorna os valores dia, mes, ano
int getDay();
int getMonth();
int getYear();
//função para definir a hora
void setTime(int, int ,int);
//definindo hora, minuto e segundo
void setHour(int);
void setMinute(int);
void setSecond(int);
// retorna hora, minuto e segundo
int getHour();
int getMinute();
int getSecond();
//exibe no formato universal
void printUniversal();
//exibe no formato AM ou PM
void printStandard();
//função para incrementar o segundo
void tick ();
private:
//variaveis
int hour;
int minute;
int second;
int month;
int day;
int year;
};
#endif
// construtor da classe com os argumento
//garante que os objetos comecem com os valores corretos
DateAndTime:: DateAndTime(int yr, int mo, int da, int hr, int min, int sec){
//definir data
setDate(yr, mo, da);
//definir hora
setTime(hr, min, sec);
}
//definir hora, minuto e segundo
void DateAndTime:: setTime(int h, int m, int s){
setHour(h);
setMinute(m);
setSecond(s);
}
//definir dia, mes , ano
void DateAndTime:: setDate(int d, int m ,int y){
setDay(d);
setMonth(m);
setYear(y);
}
//define a hora
//verifica o intervalo entre 0 e 24 horas
void DateAndTime:: setHour(int h){
if( h >= 0 && h
hour = h;
}
else{
hour = 0;
setDay(getDay() + 1);
}
}
//verifica o minuto entre 0 e 60 minutos
void DateAndTime :: setMinute( int m){
if(m >= 0 && m
minute = m;
}
else{
minute = m % 60;
setHour((getHour()+ 1));
}
}
//verifica o segundo entre 0 e 60 segundos
void DateAndTime:: setSecond( int s){
if(s >= 0 && s
second = s;
}
else{
second = s % 60;
setMinute((getMinute() + 1));
}
}
//define o ano
void DateAndTime:: setYear(int y){
year = y;
}
//define o mes e verifica se esta entre 1 e 12
void DateAndTime:: setMonth(int m){
if(m >= 1 && m
month = m;
}
else{
month = 1;
setYear((getYear() + 1));
}
}
//define o dia
//vericia se esta entre 0 e 30 dias
void DateAndTime:: setDay(int d){
if( d >= 1 && d
day = d;
}
else{
day = 1;
setMonth((getMonth() + 1));
}
}
//retorna hora, minuto e segundo
// dia, mes e ano
int DateAndTime:: getHour(){
return hour;
}
int DateAndTime:: getMinute(){
return minute;
}
int DateAndTime:: getSecond(){
return second;
}
int DateAndTime:: getDay(){
return day;
}
int DateAndTime:: getMonth(){
return month;
}
int DateAndTime:: getYear(){
return year;
}
//exibe no formato universal a data e a hora
void DateAndTime:: printUniversal(){
cout
}
//exibe a data e a hora no formato PM ou AM
void DateAndTime:: printStandard(){
cout
}
//função para incrementar os segundos na hora
void DateAndTime:: tick(){
setTime(getHour(), getMinute(),(getSecond() + 1));
}
int main(){
int loop;
//definindo os objetos da classe
DateAndTime dat(15, 02, 2022, 23,59,50);
cout
cout
dat.printUniversal();
cout
dat.printStandard();
//loop para incrementar os segundos
//exibe resultado
for(loop = 1; loop
dat.tick();
cout
dat.printUniversal();
cout
dat.printStandard();
}
return 0;
}