Ir ao conteúdo
  • Cadastre-se

C++ Como utilizar mais de um Construtor


Buzina Lopes

Posts recomendados

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

Link para o comentário
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
}

 

Link para o comentário
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();

}

 

Link para o comentário
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
Link para o comentário
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();

}

 

Link para o comentário
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
Link para o comentário
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

Link para o comentário
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.

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!