suzy Posted November 2, 2007 at 03:44 PM Report Share #144689 Posted November 2, 2007 at 03:44 PM :)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? Link to comment Share on other sites More sharing options...
TheDark Posted November 2, 2007 at 05:23 PM Report Share #144712 Posted November 2, 2007 at 05:23 PM 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; Desaparecido. Link to comment Share on other sites More sharing options...
mogers Posted November 2, 2007 at 10:52 PM Report Share #144788 Posted November 2, 2007 at 10:52 PM 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" "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now