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

[C++] Przeciążanie operatora >>

Ostatnio zmodyfikowano 2015-02-19 19:22
Autor Wiadomość
kogut52
Temat założony przez niniejszego użytkownika
[C++] Przeciążanie operatora >>
» 2015-02-19 12:09:52
Witam potrzebuje pomocy przy przeciazaniu operatorow. a konkretnie przy przeciazaniu operatora >> walczylem z tym juz caly wieczor wczoraj i nadal nie ogarniam. podam dwa pliki:

C/C++
#ifndef ZESPOLONE_H
#define ZESPOLONE_H
#include<iostream>

class zespolone
{
    double liczba1;
    double liczba2;
public:
    zespolone();
    zespolone( double wartosc1, double wartosc2 );
    double modul();
    double zmienianie( double re );
    zespolone operator +( const zespolone & wartosc1 );
    //zespolone operator-(const zespolone& wartosc1);
    friend ostream & operator <<( const ostream & wyjscie, const zespolone s );
    ~zespolone();
protected:
    double Re;
    double Im;
   
};



#endif // ZESPOLONE_H
C/C++
#include "zespolone.h"
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
//--------------------------------
zespolone::zespolone( double wartosc1, double wartosc2 )
    : Re( wartosc1 )
     , Im( wartosc2 )
{
    liczba1 = wartosc1; liczba2 = wartosc2;
    cout << "klasa utworzona";
    cout << "re : " << Re;
    cout << "im : " << Im;
}
zespolone::~zespolone()
{
    cout << "oto destruktor";
}

//-------------------------------------------------------------------------
double zespolone::modul()
{
    return sqrt( Re * Re + Im * Im );
}
//--------------------------------------------------------
double zespolone::zmienianie( double re )
{
    double a;
    cout << "podaj nowa wartosc liczby rzeczywistej";
    cin >> a;
    a = re;
    return re;
}

//-----------------------------------------------------------
zespolone zespolone::operator +( const zespolone & wartosc1 )
{
    return zespolone( wartosc1.Re + liczba1, wartosc1.Im + liczba2 );
}
//------------------------------------
/* zespolone:: operator-(const zespolone& wartosc1 )
{
return zespolone(wartosc1.Re-liczba1,wartosc1.Im-liczba2)  ;
}
*/
//----------------------------------------------------------
zespolone::ostream & operator <<( const ostream & wyjscie, const zespolone & s )
{
    return wyjscie << "wartosc rzeczywista liczby zespolonej to: " << s.liczba1 << "wartosc urojona to: " << s.liczba2 << endl;
}
blendy to:
error:'ostream'does not name a type
error:'ostream' in 'class zespolone'does not name a type

P-126780
darko202
» 2015-02-19 12:42:47
dawno tego nie robiłem, ale patrząc na
http://pl.wikibooks.org/wiki​/C++​/Przeci%C4%85%C5%BCanie_operator%C3%B3w

C/C++
class Student {
    ...
    friend ostream & operator <<( ostream & wyjscie, const Student & s );
};

ostream & operator <<( ostream & wyjscie, const Student & s ) {
    return wyjscie << "Nr indeksu: " << s.nr_indeksu << endl << "Srednia ocen: " << s.srednia_ocen << endl;
}

i kod u Ciebie
C/C++
class zespolone
{
    ...
    friend ostream & operator <<( const ostream & wyjscie, const zespolone s );
    ...
};

// zespolone:: usunąć
zespolone::ostream & operator <<( const ostream & wyjscie, const zespolone & s )
{
    return wyjscie << "wartosc rzeczywista liczby zespolonej to: " << s.liczba1 << "wartosc urojona to: " << s.liczba2 << endl;
}

 odwołanie zespolone:: jest niepotrzebne
informuje o tym kompilator
" error:'ostream' in 'class zespolone'does not name a type"

użyj
ostream & operator <<( const ostream & wyjscie, const zespolone & s )


popatrz też na:
http://cpp0x.pl/artykuly/?id=15



P-126781
Fireho
» 2015-02-19 13:14:26
Ten operator<< nie będzie metodą klasy zespolone, tylko zaprzyjaźnioną funkcją globalną. Nie będzie miał dostępu do wskaźnika this oraz nie trzeba pisać przestrzeni nazw zespolone.
Oprócz tego zrobiłeś to źle, bo
ostream & operator <<( ostream & wejscie, const zespolone s )
to nie to samo co
ostream & operator <<( ostream & wejscie, const zespolone & s )
Podsumowując: musisz usunąć te zespolone:: oraz zamienić te nagłówki funkcji na jakąś wspólną wersję.
P-126784
kogut52
Temat założony przez niniejszego użytkownika
» 2015-02-19 13:55:18
ogarnolem to przerzucajac wszystko do czesci publicznej chcoiaz pewnie nie powinienem tego tak robic..zostal mi tylko blad odnosnie 'ostream'does not a type
P-126785
Lora
» 2015-02-19 15:12:40
Powinno być
std::ostream
. W pliku nagłówkowym nie dałeś dyrektywy
using namespace std;
. I w sumie dobrze, bo nie powinno się jej używać, ale możesz na górze pliku nagłówkowego wpisać
using std::ostream;
.
P-126789
kogut52
Temat założony przez niniejszego użytkownika
» 2015-02-19 19:22:52
dzieki poszlo:)
P-126819
« 1 »
  Strona 1 z 1