klasa do obsługi liczb zespolonych a przeładowanie operatorów
Ostatnio zmodyfikowano 2016-09-02 19:35
monterinio Temat założony przez niniejszego użytkownika |
» 2016-09-02 16:58:42 gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 EDIT: Udało mi się prawidłowo skonfigurować eclipse. Obecnie za wypisanie: Odpowiada funkcja: ostream & operator <<( ostream & wypis, Zesp && z ) { wypis << z.re << " + " << z.im << "i"; return wypis; }
Natomiast za wypisanie: Odpowiada funkcja: ostream & operator <<( ostream & wypis, Zesp & z ) { wypis << z.re << " + " << z.im << "i"; return wypis; }
Czy da się to jakoś uprościć, upakować w jedną funkcję? |
|
Gibas11 |
» 2016-09-02 17:16:59 A jakim poleceniem kompilujesz? Spróbuj tak z terminala: g++ main.cpp -std=c++11 -o exec , doinstaluj dobry z g++ jeśli jest potrzebny. |
|
mateczek |
» 2016-09-02 18:50:42 @up kompiluje ikonką młotka w eclipse i nie miał ustawionego c++11 a referencje do wartości tymczasowych "zmiennych tymczasowych &&" inaczej zwane referncjami do "r-value" są wprowadzone w c++11 . (z ustawieniem cpp11 sobie widać poradził) A ustawiać kompilator musiał być może dlatego, że uruchamiając kreator nowego projektu wybrał crossGcc zamiast linuxGcc (używam eclipse do programowania mikro-kontrolera SMT32F4 właśnie w cross) Do klasycznego c++ używam qtCreatora (system ubuntu) mniej zamula i ogólnie przyjaźniejszy od eclipse do pisania programów klasycznych:) ..................................................................................................................................................................... jedne co mnie zastanawia to stara wersja gcc normalnie pod linuxem się zawsze sama aktualizuje i u mnie jest już tygryski@tygryski-linux:~$ gcc -v gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2)
|
|
monterinio Temat założony przez niniejszego użytkownika |
» 2016-09-02 18:58:59 mataczek - dziękuję bardzo za zainteresowanie. Czy jesteś w stanie odpowiedzieć na zadane przeze mnie pytanie 2 posty wyżej? |
|
mateczek |
» 2016-09-02 19:19:35 możesz albo przekazać przez wartość !!! Albo wstawić const. W cpp można ustawić stałą referencję do zmiennej tymczasowej. #include <iostream> using namespace std; class Zesp { int re; int im; friend ostream & operator <<( ostream & wypis, const Zesp & z ); public: Zesp( int _re, int _im ) : re( _re ) , im( _im ) { } Zesp operator +( const Zesp & z ) { Zesp roboczy( 0, 0 ); roboczy.re =( * this ).re + z.re; roboczy.im =( * this ).im + z.im; return roboczy; } Zesp & operator +=( Zesp z ) { ( * this ) =( * this ) + z; return( * this ); } };
ostream & operator <<( ostream & wypis, const Zesp & z ) { wypis << z.re << " + " << z.im << "i"; return wypis; } int main() { Zesp z1( 2, 2 ); Zesp z2( 4, 5 ); cout << z1 + z2 << endl; cout << z1 << endl; } |
|
monterinio Temat założony przez niniejszego użytkownika |
» 2016-09-02 19:35:17 Dziękuję za odpowiedź. ;) Co do przekazania przez wartość - wtedy kompilator wyrzuci błąd, bo funkcja += zwraca referencję do obiektu tej klasy. Chyba, że mówisz o jakimś innym sposobie, którego nie znam? |
|
1 « 2 » |