pytania odnośnie przeciążania operatorów
Ostatnio zmodyfikowano 2011-04-18 23:41
DejaVu |
» 2011-04-18 23:35:04 Referencję zwracasz po to jak już mówiłem, żebyś nie utworzył kopii obiektu.
Przykładowo masz iteratory na których można wykonać operację i++ oraz ++i. W przypadku gdy wykorzystujesz preinkrementację ++i to możesz zwiększyć wartość zmiennej i zwrócić obiekt. W przypadku gdy chcesz uzyskać postinkrementację to musisz zwrócić stan obiektu przed inkrementacją, czyli musisz stworzyć jego kopię, po czym dokonać inkrementacji na oryginalnym obiekcie. Wygląda to tak:
template < class TType > typename ListIterator < TType >::iterator & ListIterator < TType >::operator ++() { m_pCurrent = m_pCurrent->pNext; return * this; }
template < class TType > typename ListIterator < TType >::iterator ListIterator < TType >::operator ++( int ) { ListIterator < TType > result( * this ); m_pCurrent = m_pCurrent->pNext; return result; }
Pozbywając się szablonów wygląda to tak:
CKlasa::iterator & CKlasa::operator ++() { m_pCurrent = m_pCurrent->pNext; return * this; }
CKlasa::iterator CKlasa::operator ++( int ) { CKlasa result( * this ); m_pCurrent = m_pCurrent->pNext; return result; }
|
|
markon Temat założony przez niniejszego użytkownika |
» 2011-04-18 23:41:14 zatem operator musi zmodyfikować obiekt na rzecz którego został wywołany stąd referencja, prawda? |
|
1 « 2 » |