Ir ao conteúdo

Posts recomendados

Postado

Como faço para usar dois construtores como na seguinte questão?

Classe Data: Implemente uma classe para representar datas.
• Propriedades:
– ano
– mês
– dia
• Métodos construtores:
– Construtor-padrão: deverá iniciar os campos de data com a data atual (procure no header time.h
como você pode fazer isso)
– Um construtor onde deverão ser passados os 3 campos da data
• Métodos:
– Data soma(Data somaData): Soma a data representada pelo objeto com a data recebida como
parâmetro, retornando um novo objeto representado a nova data.
– Data subtrai(Data subtraiData): Igual à soma, porém realiza a subtração das duas datas

Postado

@Buzina Lopes Basta criar outro construtor, mas agora ele vai receber como parametro dia, mes e ano. Não tem problema ter vários construtores com o mesmo nome, desde que os parâmetros não sejam iguais. Os parâmetros de um construtor são chamados de assinatura na POO.

EX:

Construtur() {
	//construtor1
}

Construtur(int X) {
	//constutor2
}

 

Postado

@CiroboyBR então porque meu código nao esta funcionando?

class Datas
{
private:
	int dia, mes, ano, anoatual, mesatual, diaatual;
public:
	Datas(int dia, int mes, int ano);
	Datas();
	void SomaDatas()
	{
		int a, b, c;
		a = diaatual + dia;
		b = mesatual + mes;
		c = anoatual + ano;

		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
	}
	void SubtraiDatas()
	{
		int a, b, c;
		a = diaatual - dia;
		b = mesatual - mes;
		c = anoatual - ano;

		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
	}
};
Datas::Datas()
{
	struct tm *local;
	time_t t;
	time(&t);
	local = localtime(&t);

	int anoatual = local->tm_year;
	anoatual = anoatual + 1900;
	int diaatual = local->tm_mday;
	int mesatual = local->tm_mon + 1;

	this->diaatual = diaatual;
	this->mesatual = mesatual;
	this->anoatual = anoatual;


}
Datas::Datas(int dia, int mes, int ano)
{
	this->dia = dia;
	this->mes = mes;
	this->ano = ano;
}
int main()
{
	Datas f2(4, 12, 2018);
	f2.SomaDatas();

}

 

Postado
6 minutos atrás, Buzina Lopes disse:

@CiroboyBR então porque meu código nao esta funcionando?


class Datas
{
private:
	int dia, mes, ano, anoatual, mesatual, diaatual;
public:
	Datas(int dia, int mes, int ano);
	Datas();
	void SomaDatas()
	{
		int a, b, c;
		a = diaatual + dia;
		b = mesatual + mes;
		c = anoatual + ano;

		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
	}
	void SubtraiDatas()
	{
		int a, b, c;
		a = diaatual - dia;
		b = mesatual - mes;
		c = anoatual - ano;

		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
	}
};
Datas::Datas()
{
	struct tm *local;
	time_t t;
	time(&t);
	local = localtime(&t);

	int anoatual = local->tm_year;
	anoatual = anoatual + 1900;
	int diaatual = local->tm_mday;
	int mesatual = local->tm_mon + 1;

	this->diaatual = diaatual;
	this->mesatual = mesatual;
	this->anoatual = anoatual;


}
Datas::Datas(int dia, int mes, int ano)
{
	this->dia = dia;
	this->mes = mes;
	this->ano = ano;
}
int main()
{
	Datas f2(4, 12, 2018);
	f2.SomaDatas();

}

 

Você só está atribuindo valor às variáveis com atual no nome no construtor que não há parâmetros. O mesmo procedimento de quando não há parâmetros deve ser feito com o overloaded.

Postado
8 minutos atrás, Buzina Lopes disse:

então porque meu código nao esta funcionando?

Seu código está funcionando.

 

#include <iostream>
#include <time.h>

using namespace std;

class Datas
{
private:
	int dia, mes, ano, anoatual, mesatual, diaatual;
public:
	Datas(int dia, int mes, int ano);
	Datas();
	void SomaDatas()
	{
		int a, b, c;
		a = diaatual + dia;
		b = mesatual + mes;
		c = anoatual + ano;

		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
	}
	void SubtraiDatas()
	{
		int a, b, c;
		a = diaatual - dia;
		b = mesatual - mes;
		c = anoatual - ano;

		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
	}
};
Datas::Datas()
{
	struct tm *local;
	time_t t;
	time(&t);
	local = localtime(&t);

	int anoatual = local->tm_year;
	anoatual = anoatual + 1900;
	int diaatual = local->tm_mday;
	int mesatual = local->tm_mon + 1;

	this->diaatual = diaatual;
	this->mesatual = mesatual;
	this->anoatual = anoatual;


}
Datas::Datas(int dia, int mes, int ano)
{
	this->dia = dia;
	this->mes = mes;
	this->ano = ano;
}
int main()
{
	Datas f2(4, 12, 2018);
	f2.SomaDatas();

}

 

Postado
3 minutos atrás, Buzina Lopes disse:

O problema é que os valores não estão batendo

É porque o algoritmo que você criou não é adequado para somar datas. Aliás, não sei se é correto somar datas dessa forma, o mais comum é acrescentar dias em cima de uma data. Quando você diz que não bate, qual seria o resultado esperado?

Postado

@Buzina Lopes Só uma dica nessa sua classe

class Datas
{
private:
    int dia, mes, ano, anoatual, mesatual, diaatual;

Uma Data não tem dia atual, ela só tem dia, o dia dela é o dia atual da data, talvez você não esteja modelando bem a sua classe. Se você quer comparar um dia passado com um dia atual seria interessante comparar 2 objetos do tipo Data

Postado
2 minutos atrás, Buzina Lopes disse:

eita rapaz vou tentar aqui, poderia me dar uma ideia geral de como eu faria isso?

Você pode criar uma Classe Data com o básico e criar outra classe ManipulaData, essa classe receberia os objetos Data e os manipularia, somando, subtraindo, calculando dias etc.

Postado

Inicializar variáveis também é importante.

#include <iostream>
#include <time.h>

using namespace std;

class Datas
{
	private:
		int dia, mes, ano;
	public:
      Datas(int, int, int); //Construtor com argumentos
      Datas();                          //Construtor padrão, sem argumento
  
      void SomaDatas(int d, int m, int a) {
          cout << (d + dia) << endl;
          cout << (m + mes) << endl;
          cout << (a + ano) << endl;
      }
      void SubtraiDatas(int d, int m, int a){
          cout << (d - dia) << endl;
          cout << (m - mes) << endl;
          cout << (a - ano) << endl;
      }
      void AlterarData(int d, int m, int a){
          dia = d;
          mes = m;
          ano = a;
      }
};



int main()
{
	Datas f2(4, 12, 2018);
	f2.SomaDatas(3, 0, 0); // 7-12-2018 
	f2.SubtraiDatas(3, 0, 0); // 1-12-2018 
  
	return 0;
}



//Construtor com data atual
Datas::Datas()
{
	struct tm *local;
	time_t t;
	time(&t);
	local = localtime(&t);

	int ano = 1900 + local->tm_year;
	int dia = local->tm_mday;
	int mes = local->tm_mon + 1;
}

//Construtor com data personalizada - verificar se dia 
//vai de 1 a 31, mes de 1 a 12...
Datas::Datas(int dia, int mes, int ano)
{
	this->dia = dia;
	this->mes = mes;
	this->ano = ano;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...