Ir para conteúdo
Fórum Script Brasil
  • 0

Construtores


Andersonjb

Pergunta

E ai, pessoal, beleza? Eu queria tirar mais uma pequena duvida sobre os famosos construtores. Digamos que eu tenha esse codigo:

#include<iostream.h>

#include<conio.h>

class DiadoAno

{

public:

DiadoAno(int valormes, int valordia);

int mes;

int dia;

};

int main()

{

clrscr();

DiadoAno data(07,07);

cout<<"Mes:"<<data.mes;

getch();

return(0);

}

DiadoAno::DiadoAno(int valormes, int valordia)

{

mes=valormes;

dia=valordia;

}

Percebam que nele as variaveis dia e mes estao publicas, mas e se eu fizesse o seguinte:

#include<iostream.h>

#include<conio.h>

class DiadoAno

{

public:

DiadoAno(int valormes, int valordia);

private:

int mes;

int dia;

};

int main()

{

clrscr();

DiadoAno data(07,07);

cout<<"Mes:"<<data.mes;

getch();

return(0);

}

DiadoAno::DiadoAno(int valormes, int valordia)

{

mes=valormes;

dia=valordia;

}

No caso, daria um erro e o compilador diria, bem ali no cout, que mes e um membro não acessivel. Bem, ai eu sei que existem as funções set e get, não e, que servem tanto para acessar ou para modificar a variavel privada, correto? So que há um pequeno probleminha: como faço para mim aplicar essas funções ( set e get )? Procurei, procurei, pesquisei, e não achei, e quando achei, não consegui fazer, porque a explicação não era muito clara. alguém poderia me dar mais uma maozinha??

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Opa!

Olha como você pode fazer sua função set:

void setData( int m, int d )
{
    if ( m > 0 && m <= 12 ) // certifica que os meses serão entre 1 e 12
        mes = m;
    else
        mes = 1; // atribui o valor default 1 se os dados fornecidos forem inválidos

    if ( d > 0 && d <= 31 ) // certifica que os dias serão entre 1 e 31
        dia = d;
    else
        dia = 1; // atribui o valor default 1 se os dados fornecidos forem inválidos
}
Agora a função get:
int getDia()
{
    return dia;
}

int getMes()
{
    return mes;
}

Sacou? wink.gif

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, então o caso seria o seguinte: colocar set ou get antes das funções, certo? Mas ai você coloca set ou get e depois o nome da função em maiusculo, por exemplo:

setData( int m, int d )

se eu não colocar set em minusculo e o D de data em maiusculo não funciona? e no meu caso eu já tentei fazer o seguinte, no meu construtor, o DiadoAno, eu colocar assim: setDiadoAno(); so que não funciona, eu posso fazer isso com construtores?

Link para o comentário
Compartilhar em outros sites

  • 0
Bem, então o caso seria o seguinte: colocar set ou get antes das funções, certo? Mas ai você coloca set ou get e depois o nome da função em maiusculo, por exemplo:

setData( int m, int d )

se eu não colocar set em minusculo e o D de data em maiusculo não funciona? e no meu caso eu já tentei fazer o seguinte, no meu construtor, o DiadoAno, eu colocar assim: setDiadoAno(); so que não funciona, eu posso fazer isso com construtores?

Não... você pode escrever do jeito que quiser. É apenas uma convenção. Tem gente, por exemplo, que utiliza obter ou obtenha no lugar de get e definir ou defina no lugar de set.

Quanto aos construtores, em C++, eles devem ter *exatamente* o mesmo nome da classe já que não existe nada de especial que os classifique como construtores a não ser essa característica (ter o nome da classe). Em outras linguagens você tem a opção de mudar o nome do construtor (Object Pascal, por exemplo) ou tem uma palavra especial para ele (como VB.NET).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E ai, pessoal,mas uma duvidazinha sobre construtores: novamente estou aprendendo em cima do xodigo anterior, e tem uma função aqui que eu fiz ela para exibir is membros privados da classe, que e a função setSaida();, so que na hora da execução, o compilador simplesmente pula ela, eu vi isso inclusive pelo watch. O codigo e esse:

#include<iostream.h>
#include<conio.h>
class DiadoAno
{
	public:
	DiadoAno(int valormes, int valordia);
	int setSaida(int valormes, int valordia);
	private:
	int mes;
	int dia;
};
int main()
{
	clrscr();
	DiadoAno data(00,00);
	int setSaida(int valormes, int valordia);
	getch();
	return(0);
}
DiadoAno::DiadoAno(int valormes, int valordia)
{
	do
	{
	cout<<"Entre com o valor do mes:";
	cin>>valormes;
	cout<<"Entre com o valor do dia:";
	cin>>valordia;
	if(valormes <=0 || valormes >=13)
  cout<<"Mes Invalido\n";
	if(valordia <=0 || valordia>=32)
  cout<<"Dia Invalido\n";
	}while(valormes <=0 || valormes >=13 && valordia <=0 || valordia>=32);
	int setSaida(int valormes, int valordia);
}
DiadoAno::setSaida(int valormes, int valordia)
{
	mes=valormes;
	dia=valordia;
	cout<<"Mes:"<<mes;
	cout<<"Dia:"<<dia;
	return(0);
}

E ai, sera que eu estou declarando essa função erroneamente, porque na hora em que eu compilo simplesmente não da nenhum erro, ele so não executa!!!

Link para o comentário
Compartilhar em outros sites

  • 0
E ai, pessoal,mas uma duvidazinha sobre construtores: novamente estou aprendendo em cima do xodigo anterior, e tem uma função aqui que eu fiz ela para exibir is membros privados da classe, que e a função setSaida();, so que na hora da execução, o compilador simplesmente pula ela, eu vi isso inclusive pelo watch. O codigo e esse:

#include<iostream.h>
#include<conio.h>
class DiadoAno
{
	public:
	DiadoAno(int valormes, int valordia);
	int setSaida(int valormes, int valordia);
	private:
	int mes;
	int dia;
};
int main()
{
	clrscr();
	DiadoAno data(00,00);
	int setSaida(int valormes, int valordia);
	getch();
	return(0);
}
DiadoAno::DiadoAno(int valormes, int valordia)
{
	do
	{
	cout<<"Entre com o valor do mes:";
	cin>>valormes;
	cout<<"Entre com o valor do dia:";
	cin>>valordia;
	if(valormes <=0 || valormes >=13)
  cout<<"Mes Invalido\n";
	if(valordia <=0 || valordia>=32)
  cout<<"Dia Invalido\n";
	}while(valormes <=0 || valormes >=13 && valordia <=0 || valordia>=32);
	int setSaida(int valormes, int valordia);
}
DiadoAno::setSaida(int valormes, int valordia)
{
	mes=valormes;
	dia=valordia;
	cout<<"Mes:"<<mes;
	cout<<"Dia:"<<dia;
	return(0);
}
E ai, sera que eu estou declarando essa função erroneamente, porque na hora em que eu compilo simplesmente não da nenhum erro, ele so não executa!!!
Não sei se entendi bem o que você quer fazer, mas encontrei duas declarações de setSaida. Além disso, esse método não precisa de receber parâmetros, já que a intenção é mostrar os membro privados da classe (que ele já possui). Abaixo corrigi o código:
#include <iostream>
#include <conio.h>

using namespace std;

class DiadoAno {
      private:
             int mes;
             int dia;

      public:
             DiadoAno(int valormes, int valordia);
             void Saida();
};

int main() {
    int valormes, valordia;
    
    do {
       cout << "Entre com o valor do mes:";
       cin >> valormes;
       cout << "Entre com o valor do dia:";
       cin >> valordia;
       if (valormes <=0 || valormes >=13)
          cout << "Mes Invalido\n";
       if (valordia <=0 || valordia>=32)
          cout << "Dia Invalido\n";
    } while (valormes <=0 || valormes >=13 && valordia <=0 || valordia>=32);

    DiadoAno *data = new DiadoAno(valormes, valordia);
    data->Saida();
    getch();
}

DiadoAno::DiadoAno(int valormes, int valordia) {
    mes = valormes;
    dia = valordia;
}

void DiadoAno::Saida()
{
    cout << "Mes:" << mes << endl;
    cout << "Dia:" << dia << endl;
}

Certo? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

beleza, entendi a coisa, tenho que imprimir dentro da função set, mas me diga o que dizer essa seta aqui?

data->Saida();
E aqui, porque data e um ponteiro?
DiadoAno *data = new DiadoAno(valormes, valordia);

E nessa mesma linha de cima, DiadoAno já não tinha sido criada la em cima, porque você a criou de novo com o new?

Link para o comentário
Compartilhar em outros sites

  • 0

E aqui, porque data e um ponteiro?

DiadoAno *data = new DiadoAno(valormes, valordia);
E nessa mesma linha de cima, DiadoAno já não tinha sido criada la em cima, porque você a criou de novo com o new?
Me acostumei a utilizar alocação dinâmica em C++ e com isso sempre crio os objetos com ponteiros. Também poderia ser do outro jeito:
DiadoAno data(valormes, valordia);
É apenas uma questão de estilo (e de necessidade também, dependendo do caso). Aquelas mesmas duas linhas poderiam ser assim:
   DiadoAno data(valormes, valordia);
   data.Saida();
Capisce? wink.gif
beleza, entendi a coisa, tenho que imprimir dentro da função set, mas me diga o que dizer essa seta aqui?
data->Saida();
É a maneira mais prática de se acessar um método ou atributo de um ponteiro. O normal seria desreferenciar o ponteiro e daí invocar o método:
(*data).Saida();

Porém, pode-se utilizar a seta para não ter que escrever como a linha acima e o resultado é o mesmo.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...