Dlaczego zwracać referencje i *this?
Ostatnio zmodyfikowano 2015-03-14 13:11
Gravity Temat założony przez niniejszego użytkownika |
Dlaczego zwracać referencje i *this? » 2015-03-14 10:31:57 Cześć, mam takie pytanie . Dlaczego powinniśmy zwracać referencje oraz obiekt za pomocą *this ? Powiedzmy że mam taką funkcję void change( int & value ) { value = 10; }
Tutaj nie powinienem zwracać referencji , tak ? Bo tutaj tylko zmieniam wartość. Więc powiedzmy , że mam jeszcze jedną funkcję : struct cos { int values[ 3 ]; };
int & change( cos & value ) { return value.values[ 0 ]; }
int main() { cos value; change( value ) = 10; cout << value.values[ 0 ] << endl; }
Czy używanie *this do tego samego się sprowadza ? Tylko żeby zmienić wartość? Tylko moim zdaniem to jest bez sensu bo przecież w funkcji z klasy można normalnie zmieniać wartości nawet jak one są private.Za pomocą this-> albo poprostu odwołując się do zmiennej. |
|
aksen |
» 2015-03-14 11:19:27 Funkcja jest napisana źle. Powinna zwracać int, ale nie zwracasz w niej żadnej wartości: int change( int & value ) { value = 10; }
Odnośnie Twojego pytania: Poczytaj o referencjach, wskaźnikach i o szczególnym wskaźniku this. Temat jest obszerny. |
|
Gravity Temat założony przez niniejszego użytkownika |
» 2015-03-14 11:23:50 A tak zapomniałem ;p . Miał być void. Pisałem to na telefonie. |
|
Monika90 |
» 2015-03-14 11:28:14 Zwracanie referencji do bieżącego obiektu stosuje się, po to by umożliwić wywołanie łańcuchowe, które wygląda tak obj.f( 1, 2, 3 ).g().h( 99 ).f( 4, 5, 6 );
Znanym przykładem tej techniki jest tzw. Named Parameter Idiom. Również operator zapisu do strumienia << z tego korzysta, choć w trochę innej postaci. Nie wiem czy o to Ci chodziło, a we fragmentach kodu, które pokazałeś jest mnóstwo błędów. |
|
Gravity Temat założony przez niniejszego użytkownika |
» 2015-03-14 11:30:20 Jakie błędy? Pisałem to na szybko tylko , żeby się spytać czy to tak działa. @Edit . Poprawiłem wszystkie błędy. Już chyba nie ma żadnego. |
|
aksen |
» 2015-03-14 13:11:51 Też chciałbym umieć tak szybko poprawiać błędy ;) |
|
« 1 » |