@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) {}
@kuhar: w sumie jeszcze jedno pytanie, bo aktualnie funkcja add zwraca referencje do nowopowstałego obiektu, jeśli chciałbym żeby zamiast referencji do niego, zwracała wskaźnik, to co mam zrobić?
@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)
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
*thisźródło: comment_88KysWOBvblg790cXM6YbAazWpzUCuC0.jpg
Pobierzoperator+zadeklarowany przed użyciem?i taki protip: nie patrz na to okno Errors, tylko na Output (Build)
źródło: comment_QpQScSRDGs8Egp4RyzgiQX4DgOhvR9CP.jpg
Pobierzpo 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) {}
Complexprzedoperator+.Możesz zrobić tak: http://ideone.com/VSPEnW
Albo tak: http://ideone.com/qUW9h0
i tak, mam zrobionego maina
to jedyna różnica
@anonimowy_anonim: nie znam się, to się wypowiem
http://pastebin.com/y0J7FWek
edit. w sumie nie wiem czy ona zwraca referencje, tak mi sie wydaje
@gangstaindesign: aktualnie nie zwraca referencji na Complex, tylko nowe Complex
Żeby zwracać referencję:
Complex& add(const Complex& b) { return *this = *this +pojawił sie teraz tez taki problem, że po
Complex *c = a.add(b);
a przyjmuje wartość c, a powinna zostać tamta stara.
I nadal nie mam pojęcia, po co chcesz wskaźnik jako wynik add.
a chce wskaźnik bo mam wyraźnie w poleceniu zadania napisane, ze funkcja add ma zwrócić wskaźnik do nowopowstałego obiektu
Jak bardzo chcesz, to najrozsądniej będzie zwrócić
std::unique_ptrprzezstd::make_unique.- wskaźniki - wszystko co jest zadeklarowane z gwiazdką (gwiazdkami)