Monika90 |
» 2015-10-05 18:56:46 @mateczek Ale co Ty porównujesz? int main() { A temp = func(); cout << "-------------------------------" << endl; const A & t = func(); }
tylko najpierw dopisz const w deklaracji parametru konstruktora kopiującego. |
|
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ł ? |
|
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ć !!!! |
|
michal11 |
» 2015-10-05 19:45:31 Referencji raz zainicjowanej nie można przestawić !!!! |
No chyba nie (oczywiście wyłączając const). |
|
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. |
|
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ć. |
|
carlosmay |
» 2015-10-06 16:13:13 #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; Foo loc2( 7, 9 ); f_val = loc2; }
void value2( Foo & f_ref, Foo & f_val ) { Foo loc1( 3, 5 ); f_ref = loc1; Foo loc2( 7, 9 ); f_val = loc2; }
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ą. |
|
ast44 Temat założony przez niniejszego użytkownika |
» 2015-10-08 20:30:13 Oto właśnie mi chodziło.Dzięki |
|
1 « 2 » 3 |