Skocz do zawartości

Przeciążanie operator + (wskażnik w klasie)


Answer

Recommended Posts

Witam, mam taki problem, mam powiedzmy taką klasę:

class X
{
 int *tab;
 ....
}

w destruktorze kasowana jest tablica
i nie wiem jak przeciążyć dla tego operator+. Bo gdy stworzę klasę w operatorze +. i zwrócę przez referencje.

X& operator+(const X& x2)
{
  X kopia_wyjsciowa;
}

To wskażnik, na tablicę (*tab) jest pusty. sądze że to spowodu iż przy wyjściu z wywoływany jest destruktor dla kopii, która kasuje tablice. a zwracane jest tylko adres. (Mam błędy w kompilatorze przy odwołaniu do tablicy)

Znalazłem sposób aby "kopia_wyjsciowa" zrobić jako "static", ale czy to jest jedyne i słuszne wyjście.

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Bład tkwi w tym, że zwracasz referencję do obiektu tworzonego lokalnie. W chwili, gdy zakończy się działanie wewnątrz przeciążonego operatora, wszystkie obiekty w nim stworzone są usuwane z pamięci i zwrócona referencja wskazuje na nic.

Rozwiązaniem tego problemu jest zwrócenie obiektu przez wartość. Twój przeciążony operator powinien wyglądać więc tak:

X operator+(const X& x2)
{
    X kopia_wyjsciowa;

    // operacje sumujące tabilce z this i x2

    return kopia_wyjsciowa;
}

Tylko pamiętaj o prawidłowym skonstruowaniu konstruktora kopijącego, gdyż odgrywa on w procesie przypisania kluczową rolę.

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...