• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeciążanie operatora "<<" dla L-wartości

VPS Starter Arubacloud
0 głosów
115 wizyt
pytanie zadane 1 stycznia 2020 w C i C++ przez wojtek_suchy Mądrala (6,880 p.)

Witam,

rozwiązując zadanie 7 z rozdziału 11 książki  "Język C++. Szkoła programowania. Wydanie VI" nie potrafię przeciążyć operatora "<<" tak aby można było po nim pisać operacje, a nie zmienną.

#include <iostream>

using namespace std;

    class Ccomplex
{
private:
    int rzecz;
    int uro;
public:
    Ccomplex(){rzecz=uro=0;}
    Ccomplex(int r, int u)
    {
        rzecz=r;
        uro=r;
    }
    Ccomplex  operator+(Ccomplex x)
    {
        return Ccomplex(rzecz+x.rzecz, uro+x.uro);
    }
    friend ostream & operator<<(ostream & os, Ccomplex & c )
    {
         os<<"("<<c.rzecz<<","<<c.uro<<"i)";
        return os;
    }

};

int main ()
{
    Ccomplex a(3.0, 4.0);
    Ccomplex c(3.0, 4.0);
    
    a= a + c;
    cout<< a;                                    //działa
    
    cout<< a + c;                             //nie działa 
    return 0;
}

wyskakuje mi error:cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&' i error: intalizing argument 1 of 'std_basic_ostream...

Proszę o pomoc :)

 

1 odpowiedź

0 głosów
odpowiedź 1 stycznia 2020 przez Radfler VIP (101,030 p.)
edycja 1 stycznia 2020 przez Radfler
 
Najlepsza
friend ostream & operator<<(ostream & os, Ccomplex & c )

Ta funkcja oczekuje l-referencji do pewnego obiektu typu Ccomplex. Pierwsze wywołanie (linia 35) jest prawidłowe, gdyż wysyłasz bezpośrednio do tej funkcji nazwany obiekt (l-wartość). W drugim wywołaniu (linia 37) wysyłasz do tej samej funkcji wynik operacji (a+c), który jest r-wartością, a r-wartości nie można przypisać do l-referencji. Można natomiast przypisać ją do l-referencji na stały obiekt, co rozwiązuje problem:

friend ostream & operator<<(ostream & os, const Ccomplex & c )
1
komentarz 1 stycznia 2020 przez wojtek_suchy Mądrala (6,880 p.)
Dziękuje bardzo za pomoc!

Podobne pytania

+1 głos
1 odpowiedź 187 wizyt
pytanie zadane 19 kwietnia 2018 w C i C++ przez paweto Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 407 wizyt
0 głosów
1 odpowiedź 1,191 wizyt
pytanie zadane 26 listopada 2016 w C i C++ przez sofnir Gaduła (4,690 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...