Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pytania odnośnie przeciążania operatorów

Ostatnio zmodyfikowano 2011-04-18 23:41
Autor Wiadomość
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:
C/C++
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:
C/C++
CKlasa::iterator & CKlasa::operator ++() //preinkrementacja
{
    m_pCurrent = m_pCurrent->pNext;
    return * this;
}

CKlasa::iterator CKlasa::operator ++( int ) //postinkrementacja
{
    CKlasa result( * this );
    m_pCurrent = m_pCurrent->pNext;
    return result;
}
P-31187
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?
P-31192
1 « 2 »
Poprzednia strona Strona 2 z 2