[ RMAN @ 16.11.2008. 14:16 ] @
| Zanima me zasto je kod preklapanja operatora obavezan znak & , ili mozda nije?
Code: Complex &operator+=( const Complex &);
Complex &operator-=( const Complex &);
Complex &operator*=( const Complex &);
Complex &operator/=( const Complex &);
I da li mozete da mi objasnite sta taj & predstavlja? |
[ deerbeer @ 16.11.2008. 20:48 ] @
[ EArthquake @ 16.11.2008. 22:36 ] @
naravno da nemora , ako pogledas malo bolje , videces da pri preklapanju operatora + ne vracas referencu nego novi
objekat , jer je taj koji napravis u funkciji kojom preklapas + lokalni i nestaje cim izadje iz opsega , tj kad funkcija vrati vrednos
ako stavis & i operator +() f-ja ti vrati referencu , ponekad ce to cak i da radi , ali ce raditi po principu "ako prodje prodje"
[ deerbeer @ 17.11.2008. 11:01 ] @
^ Tacno tako evo primer :
Code:
Complex c1,c2,c3 ;
//ako uradis
c2+=c3 ;
//ne treba ti ni Complex& sa leve strane operatora+= jer vrednost c2 se nece dodeljivati nijednoj promenljivoj ..
// onda f-ja moze da izgleda ovako :
void operator += (const Complex&) ;
//ako uradis
c1 = c2 += c3 ;
// treba ti Complex& jer ce c2 da preda sebe tj. referencu (ne kopiju) promenljivoj c1 itd ..
//zato je dobra praksa da ti operatori (=,+=,/=,*=) itd vracaju referencu da bi mogao da radis operatorski lanac operacija sa desna na levo ..
//Complex& operator += (const Complex&) ;
// ako imas npr. operator + neces stavljarti Complex& nego samo Complex (novi objekat) jer samo sabiranje daje novu vrednost tj. novi objekat ..
c1 = c2 + c3 ;
//onda bi tvoj operator izgledao ovako
const Complex operator +( const Complex &);
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.