Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

klasa do obsługi liczb zespolonych a przeładowanie operatorów

Ostatnio zmodyfikowano 2016-09-02 19:35
Autor Wiadomość
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:
C/C++
cout << z1 + z2;
Odpowiada funkcja:
C/C++
ostream & operator <<( ostream & wypis, Zesp && z ) {
    wypis << z.re << " + " << z.im << "i";
    return wypis;
}
Natomiast za wypisanie:
C/C++
cout << z1;
Odpowiada funkcja:
C/C++
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ę?
P-151335
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.
P-151336
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)

 
P-151342
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?
P-151344
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.
C/C++
#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;
    }
   
    // przeladowany operator =+
    Zesp & operator +=( Zesp z ) {
        ( * this ) =( * this ) + z;
        return( * this );
    }
   
    // przeladowany operator <<
   
};

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;
}
P-151345
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?
P-151347
1 « 2 »
Poprzednia strona Strona 2 z 2