Przeciążanie operatora+, a konstruktor kopii.
Ostatnio zmodyfikowano 2013-07-23 21:23
Prakosza Temat założony przez niniejszego użytkownika |
Przeciążanie operatora+, a konstruktor kopii. » 2013-07-23 20:57:18 Uczę się programować i ostatnio napisałem prosty program, w którym ćwiczyłem przeciążanie operatorów. Jak się okazało nie mogę zastosować takiej konstrukcji: licznik licznik::operator +( licznik & rhs ) { return licznik( licz + rhs.getLicz() ); } o ile nie zastosuje takiej konstrukcji konstruktora kopii licznik( const licznik & ); i za chiny nie mogę dojść, dlaczego gdy usunę z niej const, program się nie kompiluje, pomimo tego, iż konstruktor ten w ogóle w programie nie jest używany. |
|
pekfos |
» 2013-07-23 21:01:32 Jakby nie był używany, to by nie było problemu. const tam musi stać, by można było podać obiekt tymczasowy (np wynik operatora +). |
|
Prakosza Temat założony przez niniejszego użytkownika |
» 2013-07-23 21:06:47 Tak napisałem konstruktor kopii, by za każdym razem, gdy jest używany wyświetlał o tym komunikat. Podczas działania programu tego komunikatu nie ma, więc myślałem, że nie jest on wykorzystywany. |
|
pekfos |
» 2013-07-23 21:12:40 Równie dobrze możesz nie wywoływać nigdzie kodu używającego konstruktora kopiującego, ale ten kod również jest kompilowany i musi być poprawny. |
|
Monika90 |
» 2013-07-23 21:23:43 Ponieważ zwracasz obiekt przez wartość, to klasa musi mieć konstruktor kopiujący (lub przenoszący), nawet wtedy gdy jego wywołanie zostanie pominięte (w ramach optymalizacji, co ma miejsce w twoim przypadku).
Jak zadeklarujesz swój własny konstruktor z parametrem licznik&, to kompilator spróbuje go użyć, a ponieważ zwracasz obiekt tymaczasowy, czyli r-wartość, to ta próba zakończy się niepowodzeniem, bo referencje do nie-const nie wiążą się z r-wartościami.
Zmień nazwę tematu, bo nie ma czegoś takiego jak "obciążanie operatora" |
|
Prakosza Temat założony przez niniejszego użytkownika |
» 2013-07-23 21:23:56 Przepraszam, oczywiście chodzi o przeciążanie. Dziękuje za wyjaśnienie. |
|
« 1 » |