metoda klasy string zwracajaca referencje do obiektu tej klasy.
Ostatnio zmodyfikowano 2016-11-16 23:37
latajacaryba Temat założony przez niniejszego użytkownika |
metoda klasy string zwracajaca referencje do obiektu tej klasy. » 2016-11-15 10:47:46 Witam. Natknalem sie na metode klasy string, ktora zwraca referencje do zmodyfikowanego obiektu. Tylko jak to dziala? Jak wyglada zwracanie referencji? Prosze o wytlumaczenie jak to dziala. |
|
mateczek |
» 2016-11-15 11:35:26 to jest wręcz standardowa praktyka !!! #include <iostream> #include<string> using namespace std;
int main() { string s = "Alicja", s1 = "ma", s2 = "tygrysa"; string s3 = s + s1 + s2; cout << s3; }
zwracanie referencji do samego siebie wiąże sie ze wskaźnikiem "this" #include <iostream>
using namespace std; struct counter { int i; counter increment_1() { ++i; return * this; } counter & increment_2() { ++i; return * this; } }; int main() { counter licznik; licznik.i = 0; cout << licznik.i << endl; cout << "dokokonamy zwiększenia wartości przez potrójną inkrementacje = "; cout <<( licznik.increment_1().increment_1().increment_1() ).i << endl; cout << "ale na wszelki wypadek wyświetlimy zawartość licznika " << licznik.i << endl << "ups coś poszło nie tak :P" << endl; licznik.i = 0; cout << licznik.i << endl; cout << "dokonamy zwiększenia wartości przez potrójną inkrementacje = "; cout <<( licznik.increment_2().increment_2().increment_2() ).i << endl; cout << "wyświetlimy zawartość licznika " << licznik.i << endl; } Funkcja counter & increment_2() wywołana na rzecz obiektu "licznik" zwróci nam namiary na ten obiekt (coś jakby adres). Dzięki temu zabiegowi możemy ponownie zastosować opcję inkrementacji i ponownie będzie to się odbywało na rzecz obiektu "licznik" |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-11-15 13:30:25 Ale funkcja zwroci adres i co dalej? Gdzies go przypisze? A moze ustawia wskaznik this na utworzonego stringa i jakoś zmieni adres na ktory wskazywal poprzedni this? Ps. Prosze bez struktur, jeszcze nie uczylem sie tego ;) |
|
Monika90 |
» 2016-11-15 13:39:21 @mateczek Tworzy nowy string i zwraca go przez wartość, gdyby operator + zwracał referencję to by było bardzo źle. |
|
carlosmay |
» 2016-11-15 14:55:02 |
|
j23 |
» 2016-11-15 14:57:32 Prosze bez struktur, jeszcze nie uczylem sie tego ;) |
Struktury to to samo co klasy, różnica jest tylko w domyślnym dostępie do pól - w strukturze wszystkie pola są domyślnie publiczne, a w klasie prywatne. |
|
mateczek |
» 2016-11-15 15:13:47 Tworzy nowy string i zwraca go przez wartość, gdyby operator + zwracał referencję to by było bardzo źle. |
racja mój błąd. @latajacaryba np. Chodzi o to by można było po użyciu funkcji dalej mieć namiary na obiekt. Wszelkiego rodzaju tasiemce. cout<<a<<b<<c; |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-11-15 15:22:22 Jasne, ja to rozumiem. Tylko spójrzmy, kiedy mamy coś takiego: int zwrot() { int y = 5; return y; } int main() { int x; }
Kiedy wywołamy funkcję tak: x = zwrot; to do x przypiszemy wartość y, czyli 5. Kiedy funkcję wywołamy zwrot(); to ta wartość nam przepadnie (nigdzie nie zostanie przypisana). No więc dlaczego analogicznie nie jest z funkcją zwracającą this? Wiem, to jest wskaźnik do obiektu na rzecz którego wywoływana jest dana metoda, ale co się dzieje po wywołaniu funkcji? Otrzymujemy nową tablicę, tak? I co dalej? this wskazuje na nią? Jak? No i potem zwracamy ten wskaźnik, ale nigdzie nie ma '=' więc wychodziłoby na to, że zwracamy tak, jak przykład z zwrot(); |
|
« 1 » 2 3 |