Niemiec Opublikowano 10 Lutego 2005 Zgłoś Opublikowano 10 Lutego 2005 gcc wywala jakis blad i nie wiem wsumie dlaczego :/ Przeciazenie operatora '--' dla napisu. Wyrazenia "--napis" i "napis--" odwracaja kolejnosc w napisie. Operatory zachowuja konwencje pre/postfiksowosci. #include <iostream>using namespace std;class napis{public: char *nap; napis(); int wypisz();};napis& operator--(napis&);napis& operator--(napis&, int);int main(){ napis n1; n1.wypisz(); --n1.wypisz(); n1--.wypisz();return 0;}napis::napis():nap("kot ma ale"){ cout<<nap; }napis& operator--(napis &n){ int i=0; char *temp; temp = new char[strlen(n.nap)]; while(n.nap){ temp[i]=n.nap[strlen(n.nap)-i];i++; } n.nap=temp;return n;}napis& operator--(napis &n, int x){ int i=0; char *temp; temp = new char[strlen(n.nap)]; while(n.nap){ temp[i]=n.nap[strlen(n.nap)-i];i++; } n.nap=temp;return n;}int napis::wypisz(void){ cout<<nap<<endl;return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Niemiec Opublikowano 10 Lutego 2005 Zgłoś Opublikowano 10 Lutego 2005 blad jaki wywala to: 17 non-lvalue in decrement Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 10 Lutego 2005 Zgłoś Opublikowano 10 Lutego 2005 b.cpp: In function `int main()': b.cpp:17: error: non-lvalue in decrement Nie umiesz czytać inglisz? ;) Zamiast --n1.wypisz(); ma być (--n1).wypisz(); Nie zmienia to faktu, że program jest źle napisany... Poza tym czy wiesz , że przeciążone operatory ++ i -- nie zachowują się tak jak myślisz jeżeli chodzi o pre- i postfix? Operator przyrostkowy (post) jest stosowany natychmiast. #include <iostream>using namespace std;class A{public: int val; A(int v) {val=v;} A& operator++() { val++; return *this;} A& operator++(int) { val++; return *this;} void print() {cout<<val<<endl;}};int main(){ A a(55); a.print(); a++.print(); //56 (++a).print(); // i tak tez nie :> A c(55); c.print(); A d = c++; //56 d.print(); (++c).print(); int b=55; cout << b << endl; cout << b++ << endl; //55 !! cout << ++b << endl; }Wynik: 55 56 !! 57 55 56 !! 57 55 55 !! a tu ok :) 57 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Niemiec Opublikowano 10 Lutego 2005 Zgłoś Opublikowano 10 Lutego 2005 a troche bardziej po polsku mozesz napisac bo niekumam tego do konca. a do tego -n1; n1.wypisz(); juz doszedlem ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...