Wpis z mikrobloga

#programowanie #cpp
jak w środku struktury przekazać do funkcji własną referencję?

struct Complex {
double real, imaginary;

Complex add(Complex &a) {
Complex newComplex = { 0, 0 };
newComplex = this + a;
return newComplex;
}

};

zamiast this które jest wskaźnikiem chciałbym tam wrzucić referencję

also, how do i wykop? nie umiem tu poprawnie wrzucic kodu, sory
  • 19
@gangstaindesign: po pierwsze czy masz zrobionego maina ?
po drugie - daj to do jednej klasy a nie baw sie w struktury. metody zadeklaruj w klasie (operatory też!), a jak chcesz metody definiować to uzyj operatora zakresu np. MojaKlasa::MojaMetoda(int x) {}
po drugie - daj to do jednej klasy a nie baw sie w struktury. metody zadeklaruj w klasie (operatory też!), a jak chcesz metody definiować to uzyj operatora zakresu np. MojaKlasa::MojaMetoda(int x) {}


@anonimowy_anonim: nie znam się, to się wypowiem
aktualnie funkcja add zwraca referencje


@gangstaindesign: aktualnie nie zwraca referencji na Complex, tylko nowe Complex
Żeby zwracać referencję:

Complex& add(const Complex& b) { return *this = *this + b; }
Żeby zwracać pointer, co jest wg mnie kompletnie bez sensu:

Complex* add(const Complex& b) { *this = *this + b; return this; }
@kuhar: niestety ale w poleceniu mam tak :/

w pierwszej funkcja zwraca wskaznik do nowoutworzonego elementu tego typu


pojawił sie teraz tez taki problem, że po
Complex *c = a.add(b);
a przyjmuje wartość c, a powinna zostać tamta stara.
@kuhar: dobra, jutro sie tym pobawie sam na spokojnie, dzieki za pomoc :)

a chce wskaźnik bo mam wyraźnie w poleceniu zadania napisane, ze funkcja add ma zwrócić wskaźnik do nowopowstałego obiektu
@gangstaindesign: wszystko fajnie, tylko jak zwrócisz surowy wskaźnik, to jak użytkownik ma wiedzieć czym go zaalokowałeś i kiedy ma zwolnić pamięć? Masz jakieś złe polecenie chyba...
Jak bardzo chcesz, to najrozsądniej będzie zwrócić std::unique_ptr przez std::make_unique.
@gangstaindesign: Ok, więc jesteś Javowcem, więc należy Ci się wyjaśnienie (a raczej przypomnienie, bo Javowcy o tym zapominają): w Javie prawie wszystko jest przekazywane przez wskaźnik (a nie referencję jak to się Javowcom tłucze - referencje nie mogą być == null, a w Javie mogą..) - tylko prymitywy są kopiowane: longi, inty itd. W C++ jest trochę inaczej, są:
- wskaźniki - wszystko co jest zadeklarowane z gwiazdką (gwiazdkami)
- referencje