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

suzy

array dinamico!

3 mensagens neste tópico

:)viva! malta! tenho uma duvida aqui num codigo! nao entendo bem porque se utiliza neste caso o operator=

vou tentar explicar:

tenho uma classe fracção{

                    int numerador;

                  int denominador;

                }....

tenho outra classe arrayfracçoes{

                                fracção *a// ponteiro para a classe fracção

                                int n;

}................

o meu problema é para que serve este codigo?

arrayfraccoes & arrayfraccoes:: operator = (const arrayfraccoes &ob){
     delete[]a;
     fraccao *aux1=new fraccao[ob.n];
     if(!aux1){
             cout<<"\n memoria insuficiente";
             return *this;
     }
    for(int i=0; i<ob.n;i++)
             aux1[i]=ob.a[i];
             a=aux;
             return *this;
}

que faz este codigo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se é bem esta resposta que pretendes, mas esse código copia todos os elementos da instância de arrayfraccoes passada como argumento para a instância sobre qual é chamado. Permite fazer por exemplo

arrayfraccoes af;
//...inserir elementos em af
arrayfraccoes novo_af;
novo_af = af;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso chama-se fazer o overloading do operador "=". O TheDark já explicou para que serve.

Numa atribuição o "objecto actual" é o objecto da esquerda, ou seja, em    novo_af = af ;    O "objecto actual" é o  "novo_af".

delete[]a;

o "a" é o apontador do objecto "novo_af"

Isto serve para o que vou dizer a seguir:

Esse código tem um bug. Ao fazer a cópia do "ob" para o objecto actual (novo_af) , não actualiza o número de fracções do objecto actual ( novo_af.n ) .

arrayfraccoes & arrayfraccoes:: operator = (const arrayfraccoes &ob)
{
delete[]a; // liberta a memoria ocupada pelo array de fracções    novo_af.a[]

n = ob.n ; 	// numero de fraccoes de  novo_af  vai ser igual ao numero de fraccoes de "ob", esta linha faltava

a = new fraccao[ob.n];	// nao ha necessidade de usar variaveis auxiliares. aloca espaco para  ob.n  fraccoes
if( !a ){			
	cout<<"\n memoria insuficiente";
	n = 0;
	return *this;
}
for(int i=0; i<ob.n;i++)	// copia as fraccoes de "ob" para o array do objecto actual ( novo_af )
	a[i] = ob.a[i];
return *this;
}

nao sei se sabes mas é possivel fazer    i = j = k = t = 5;  todas as variaveis ficam com o valor 5

para isso é que serve o return * this, para podermos fazer      novo3 = novo2 = novo_af = ob ;    sendo todos estes  "arrayfraccoes"

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