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
  • Autor do tópico
  • 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
  • Autor do tópico
  • @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
  • Autor do tópico
  • 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

    ×