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;

}