zolty13 Temat założony przez niniejszego użytkownika |
przeciazenie operatora ! » 2016-02-09 18:23:22 witam robie program z przciazeniem operatora ! i niestety wywala blad:no matching function for call to 'wektor::wektor(double, double)' może nie za bardzo to rozumiem nwm, ale czytam kurs i wszystko wydaje się w porządku. #include <iostream>
using namespace std; class wektor { public: double x, y; wektor(); wektor & operator !(); ~wektor() { cout << "Zegnamy"; }; }; wektor & wektor::operator !( void ) { return wektor( -( this->x ), -( this->y ) ); }
wektor::wektor() { this->x = 0; this->y = 0; cout << "Witamy" << endl; }
int main() { wektor u; cout << "[" << u.x << "," << u.y << "]" << endl; return 0; } |
|
Gibas11 |
» 2016-02-09 18:26:55 Nie masz konstruktora przyjmującego 2 parametry double, domyślam się, że takowy miałby ustawiać kolejno x i y na podane w parametrach wartości, więc napisanie go nie powinno stanowić problemu. |
|
zolty13 Temat założony przez niniejszego użytkownika |
» 2016-02-09 18:37:51 nawet jak on jest to niestety nie dziala #include <iostream>
using namespace std;
class wektor { public: double x, y; wektor(); wektor( double x, double y ) { this->x = x; this->y = y; } wektor & operator !(); ~wektor() { cout << "Zegnamy"; }; };
wektor & wektor::operator !() { return wektor( -( this->x ), -( this->y ) ); }
wektor::wektor() { this->x = 0; this->y = 0; cout << "Witamy" << endl; }
int main() { wektor u; cout << "[" << u.x << "," << u.y << "]" << endl; return 0; }[ / cpp ] |
|
1aam2am1 |
» 2016-02-09 18:47:13 Usuń jeszcze referencje w operatorze ! |
|
zolty13 Temat założony przez niniejszego użytkownika |
» 2016-02-09 19:00:35 a fakt i kompiluje a co teraz zrobić żeby dostać z wektora 10 10 przeciwny pisałem !u; i drukowałem na ekran ale nic :/ przy czym przy negacji tak jakby się tworzyl nowy obiekt bo wypisuje mi tekst z konstruktora "witamy" i tez kolejne pytanie czemu nie mogę stosować referencji żeby zmieniac ten obiekt? i jeszcze jedno czy trzeba zawsze robic ten konstruktor dla np 2 argumentow czy domyślny wystarczy? EDIT doszedłem do tego ze musze zrobić u=!u; pytanie tylko czemu nie można zrobić !u lub be zposrednio przy wypisaniu cout << !u.x;?(zwraca 0 tak jakby to był nieprzeładowany operator) i dalej czemu przy tym zapisie !u tworzy się nowy obiekt (widoczne działanie konstruktora i destruktora) #include <iostream>
using namespace std; class wektor { public: double x, y; wektor(); wektor( double x, double y ) { cout << "Witamy-10" << endl; this->x = x; this->y = y; } wektor operator !(); ~wektor() { cout << "Zegnamy" << endl; }; };
wektor wektor::operator !() { return wektor( -( this->x ), -( this->y ) ); }
wektor::wektor() { this->x = 0; this->y = 0; cout << "Witamy-0" << endl; }
int main() { wektor u( 10, 10 ); wektor v; cout << "u[" << u.x << "," << u.y << "]" << endl; cout << "v[" << v.x << "," << v.y << "]" << endl; !u; cout << "u[" << u.x << "," << u.y << "]" << endl; cout << "v[" << v.x << "," << v.y << "]" << endl; return 0; } |
|
kmlkamilek |
» 2016-02-09 19:51:09 Źle trochę myślisz. Przeciążanie operatorów, jest po to, by móc określić jak ma się zachować obiekt, gdy użyjemy jakiegoś operatora. Pisząc !u.x, używasz operatora negacji, na składowej typu double, a nie na obiekcie. |
|
zolty13 Temat założony przez niniejszego użytkownika |
dziekuje » 2016-02-09 19:57:55 faktycznie dzięki trzeb się troche przestawić, lapie się na takich bledach ;) przed chwila się zastanawiałem czemu przy jednym przeciążeniu tworzy się nowy obiekt a przy innym nie i okazało się ze przy rzekazaniu przez wartość (kopia się tworzy wiec się tworzy nowy obiekt-wektor :) ) a przy referencji już nie tworzy się nowy obiekt. Niby nic odkrywcego dla kogos kto robil już wcześniej c++ porządnie jak ja, ale czasem ciężko się przestawić |
|
« 1 » |