Przesyłanie do funkcji przez referencje wektora wskaźników
Ostatnio zmodyfikowano 2017-05-19 16:55
michal11 |
» 2017-05-19 09:09:45 Jeżeli masz taki fragment kodu MyClass myObj;
fun( myObj );
to mogą się wydarzyć dwie rzeczy w zależności od tego jaką sygnaturę ma funkcja fun, jeżeli będzie to void fun( MyClass obj ); to wtedy myObj zostanie skopiowany do obiektu obj i w funkcji fun będziesz operował na kopii, jeżeli będzie to void fun( MyClass & obj ); to wtedy myObj zostanie przekazany przez referencję więc w funckji fun obj będzie jakby inną nazwą obiektu myObj, czyli nie będzie kopiowania. Dalej, operator & służy do wyłuskania adresu obiektu, można go przestawić jako funkcję MyClass * operator &() czyli żeby taki kod zadziałał MyClass myObj;
fun( & myObj );
funkcja fun musi mieć sygnaturę void fun( MyClass * ObjPtr ); . Jeżeli natomiast masz wskaźnik na jakiś obiekt to aby kod zadziałał masz takie możliwości MyClass * pObj;
fun1( pObj ); fun2( * pObj );
wtedy funkcja fun1 musi wyglądać tak void fun( MyClass * ObjPtr ); a funkcja fun2 może wyglądać tak void fun2( MyClass obj ); lub tak void fun2( MyClass & obj ); wtedy analogicznie jak w pierwszym przypadku albo będzie kopiowanie albo referencja. |
|
Monika90 |
» 2017-05-19 10:25:39 Przypuszczam że nie wiesz co znaczą słowa takie jak referencja i dereferencja. Spróbuję Ci wyjaśnić.
Operator * jest nazywany operatorem wyłuskania lub operatorem dereferencji, ponieważ czynność którą wykonuje to wyłuskanie, inaczej dereferencja. Operator ten bierze wskaźnik i daje nam dostęp do obiektu na który ten wskaźnik wskazuje.
Operator & ma działanie odwrotne do operatora dereferencji, wiec można by go nazywać operatorem referencji, ale nikt tak nie mówi, bo to byłoby mylące. Dlatego operator ten nazywamy operatorem pobrania adresu (po angielsku address-of operator). Bierze on jakiś obiekt i daje nam adres tego obiektu.
W takim razie, co to jest referencja?
Referencja jest to zmienna typu referencyjnego (referencje mogą być też zwracane z funkcji, ale o tym później), czyli zmienna zadeklarowana w taki sposób T& r; Występujący w typie tej zmiennej (T&) znak & nie ma nic wspólnego z operatorem pobrania adresu, po prostu użyto tego samego symbolu. Istnieją też referencje deklarowane w taki sposób T&& r; użyty tu operator && nie ma nic wspólnego z iloczynem logicznym, po prostu użyto tego samego symbolu. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-05-19 16:55:28 Dziękuję bardzo za tak rozbudowane odpowiedzi. Nie mam pojęcia, jak mogłem zapomnieć o tak podstawowych rzeczach, troche mnie zmyliło to, że wektory przechowywały wskaźniki, a nie obiekty i mi się pomieszało. W każdym razie jeszcze raz bardzo dziękuję, temat zamykam :) |
|
1 2 « 3 » |