• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bushin

Constructor

12 mensagens neste tópico

Viva ,

Tenho a seguinte duvida:

        1)  Sempre que temos uma classe abstracta temos que que criar um construtor?

        2)  Em que situações precisamos usar um construtor?

Foi a wikipédia mas fikei a perceber o mesmo ... agradecia a quem me pode-se teoricamente e com um pequeno exemplo explicar. :-[

PS:

(Origem: Wikipédia)

Construtor em linguagens de programação orientadas a objeto é um método chamado assim que uma nova instância do objeto for criada. Tal método geralmente é responsável pela alocação de recursos necessários ao funcionamento do objeto além da definição inicial das variáveis de estado (atributos).

cumprimentos,

BusHin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente o que aí te explicam é que um construtor é um método da classe chamado quando um objecto dessa classe é declarado. Por exemplo:

class teste
{
    public:
        int v1;
        char *str;

        teste();
        teste( char * );
};

teste::teste()
{
    v1 = 0;
    str = NULL;
}

teste::teste( char * temp )
{
    v1 = 1;
    str = new char[strlen(temp) + 1];
    strcpy( str, temp );
}

Com esta classe se eu mais tarde criar uma instância tipo:

teste t1;

se nenhum dos construtores existisse ambas as varáveis da classe seriam criadas mas ficariam com valores que nós provavelmente não queremos.

Neste caso como existe um construtor sem parâmetros é chamado e v1 é inicializado a 0 e str passa a NULL. Não seria necessário mas é sempre aconselhado criar um construtor sem parâmetros e por experiência posso dizer que elimina muitos erros.

O segundo construtor permite declarar uma classe como:

teste t2( "texto" );

Deste modo eu posso inicializar a classe com valores logo na sua criação, se quiser mais é só adicionar mais parâmetros.

Neste caso até aloco a memória exacta necessária para o texto que envio. Evitando assim ter que declarar um array de tamanho fixo, cujo o tamanho pode ser desperdiçado, ou pior podia enviar mais texto do que o array aguentaria.

Existem imensas coisas diferentes que se podem fazer no construtor, mas o no básico é um método que é chamado quando crias uma instância da classe. Pode se usado para receber valores e trabalhar com eles para inicializar as variáveis da classe ou outra coisa que não tenha nada a ver.

Não é obrigatório teres um construtor mas aconselho a sua criação em todas as classes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) briga dão,

Não querendo abusar,

Outra duvida , relacionada com essa, se me poder ajudar,

    1) Sempre que utilizo um constructor tenho que utilizar também um destrutor?

    2) qual é o seu timing certo, para o utilizar?

nota:

a ideia geral será tipo o malloc e o free .

cumprimentos,

BusHin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só precisas do destrutor se na criação da classe ou através de outros métodos da mesma for alocada memória dinâmicamente como a partir do new. Senão quando a classe for destruída a memória alocada anteriormente continua lá.

A menos que queiras que qualquer acção aconteça quando um objecto é destruído, como o decremento de um contador ou assim, nesse caso o destrutor também é necessário.

Tu não usas directamente o destrutor ele é usado automaticamente como o construtor a diferença é que é quando o objecto é eliminado e não quando é criado. Assim que o objecto chegar ao fim do seu tempo de vida (como qualquer outra variável) o destrutor é chamado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Construtor/Destrutor são sempre necessário. E são sempre chamados no inicio/fim de vida de cada objecto da classe.

Podem é por vezes estar vazios.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

:bored: é pá.... ja me confundiste!

Não dá para completares a explicação com o exemplo que vem no post anterior.

cumprimentos,

BusHin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que ele queria dizer é que eles são sempre criados por omissão, ou seja... se não os declarares o compilador cria o construtor sem parâmetros por omissão sem nada no scope.

Não sei se fui explicito..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;)

Fiquei confundido devido, a contradição acho eu entre o merlin3000  " ...Só precisas do destrutor se na criação da classe ou através de outros métodos da mesma for alocada memória dinamicamente como a partir do new. Senão quando a classe for destruída a memória alocada anteriormente continua lá."

e agora shumy "O Construtor/Destrutor são sempre necessário" ... "são sempre criados por omissão".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ali podia ter sido mais correcto. Se tu não declarares o destrutor ele cria um por defeito internamente. Simplesmente não és obrigado a declará-lo a não ser que queiras que algo mais específico aconteça aquando a destruição do objecto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente .. o compilador cria-o sempre... agora tu não o precisas de explicitar se não precisares dele...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora