Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dlaczego zwracać referencje i *this?

Ostatnio zmodyfikowano 2015-03-14 13:11
Autor Wiadomość
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ę
C/C++
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ę :
C/C++
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.
P-128324
aksen
» 2015-03-14 11:19:27
Funkcja jest napisana źle. Powinna zwracać int,
ale nie zwracasz w niej żadnej wartości:

C/C++
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.
P-128328
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.
P-128329
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
C/C++
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.
P-128332
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.
P-128333
aksen
» 2015-03-14 13:11:51
Też chciałbym umieć tak szybko poprawiać błędy ;)
P-128340
« 1 »
  Strona 1 z 1