Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Buzina Lopes

C++ Como utilizar mais de um Construtor

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, essa questão eu consegui fazendo um construtor só. Mas não sei como faz pra usar dois

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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();

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
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();

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu inicializo tudo em um construtor dá certo

 

adicionado 0 minutos depois

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×