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

Referencje

Ostatnio zmodyfikowano 2015-10-08 21:12
Autor Wiadomość
Monika90
» 2015-10-05 18:56:46
@mateczek
Ale co Ty porównujesz?

C/C++
int main()
{
    //Porównaj
    A temp = func(); //to
    cout << "-------------------------------" << endl;
    const A & t = func(); //z tym
}

tylko najpierw dopisz const w deklaracji parametru konstruktora kopiującego.
P-138182
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-05 19:15:01
A jak to się ma do tego że jak pracuję na referencjach to pracuję na oryginałach a jak na wartościach to na kopiach.Np: deklaruję argument jako referencję, a potem wrzucam tam wartość albo vice versa.To wtedy na czym będę pracował ?
P-138184
mateczek
» 2015-10-05 19:31:39
@ tylko najpierw dopisz const w deklaracji parametru konstruktora kopiującego.
No właśnie sprawdziłem  powinien odpalić się konstruktor kopiujący (o niego się pluje gdy nie ma const) ?? dlaczego się nie odpala ??


@ ast44
w przypadku referencji można "mówić ustawiam referencję na obiekt lub zmienną".  Posługując się referencją operujesz na obiekcie do którego się odnosi.
Referencji raz zainicjowanej nie można przestawić !!!!
P-138185
michal11
» 2015-10-05 19:45:31
Referencji raz zainicjowanej nie można przestawić !!!!
No chyba nie (oczywiście wyłączając const).
P-138186
carlosmay
» 2015-10-05 20:38:23
Przy tym temacie warto by poznać działanie stosu.
Kiedy odkładane są ramki na stosie i kiedy są z niego zdejmowane,
Co znajduje się w każdej ramce i oka działa kolejka LIFO.
Nawet jeśli nie pomoże w zrozumieniu tego tematu na pewno pomoże w wielu innych przypadkach.
https://pl.m.wikipedia.org​/wiki/Stos_(informatyka)

Też nie mogłem skumać jak działa to przekazywanie do funkcji, a utknąłem
Przy rekurencjach i nic nie rozumiałem.
P-138188
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-05 20:45:36
Potestowałem trochę i wychodzi że nie ważne czy przy wywołaniu funkcji użyję wartości czy referencji to wszystko decyduje się w definicji funkcji.Jeżeli jako argument zadeklaruję referencję to potem nieważne czy rzeczywiście korzystam z referencji czy z wartości to działam na oryginałach i efekty widać też poza funkcją.Jeżeli zadeklaruję argumenty jako wartości to potem nieważne czy korzystam rzeczywiście z wartości czy z referencji działam na kopiach ,efekty widać tylko w bloku funkcji.
Widać tak musi być.
P-138189
carlosmay
» 2015-10-06 16:13:13
C/C++
#include <iostream>
#include <conio.h>

class Foo {
    int m_a;
    int m_b;
public:
    Foo()
        : m_a( 0 )
         , m_b( 0 )
    { }
    Foo( const int a, const int b )
        : m_a( a )
         , m_b( b )
    { }
    Foo( const Foo & f )
        : m_a( f.m_a )
         , m_b( f.m_b )
    { }
    ~Foo() { }
    void Show() const { std::cout << m_a << ", " << m_b << std::endl; }
};

void value( Foo f_ref, Foo f_val ) {
    Foo loc1( 3, 5 );
    f_ref = loc1; // f_ref jest lokalny mimo referencji w main(), nie modyfikuje wartosci
    Foo loc2( 7, 9 );
    f_val = loc2; // lokalny obiekt po powrocie z funkcji ma niezmienione wartosci
}

void value2( Foo & f_ref, Foo & f_val ) {
    Foo loc1( 3, 5 );
    f_ref = loc1; // referencja
    Foo loc2( 7, 9 );
    f_val = loc2; // referencja
}

int main()
{
    using namespace std;
    Foo foo1( 2, 4 );
    Foo foo2( 4, 8 );
    cout << "Przed wywolaniem value()" << endl;
    Foo & ref = foo1;
    Foo val = foo2;
    ref.Show();
    val.Show();
   
    value( ref, val );
    cout << "Po wywolaniu value()" << endl;
    ref.Show();
    val.Show();
   
    value2( ref, val );
    cout << "Po wywolaniu value2()" << endl;
    ref.Show();
    val.Show();
   
    _getch();
}

Nie ważne czy w funkcji main() masz referencje czy wartości, liczy się jak to przyjmuje funkcja.
Mały przykład.

void funkcja( const zespolone & zesp, int & a ) { }
 tutaj zawsze funkcja działa na referencjach, bo tak przyjmuje argumenty.

void funkcja( const zespolone zesp, int a )
 tutaj funkcja działa na lokalnych zmiennych, bo przyjmuje argumenty przez wartość i nie ma znaczenia, że w main(), którakolwiek była referencją.
P-138206
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-08 20:30:13
Oto właśnie mi chodziło.Dzięki
P-138289
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona