Avatar billede kernelx Juniormester
15. december 2006 - 01:15 Der er 5 kommentarer og
1 løsning

overloade operator>> fra ifstream

hi,
jeg har følgende kode
---
class test
{
    private:
        char value;

    public:
        ...
        char getValue(void);
        friend ifstream& operator>>(ifstream&, test&);
}

char test::getValue()
{
    return this->value;
}

ifstream& operator>>(ifstream& is, test& value)
{
    is >> value.getValue();  // her er der en fejl???

    return is;
}
---

"os << value.getValue();" i ofstream ser ud til at virke.
er det også muligt at lave lignene med ifstream?

mit problem er, at jeg gerne vil læse data ud af en fil. Disse data skal direkte
med >> læses in i objektet "test". er det muligt?

med venlig hilsen
KernelX
Avatar billede bertelbrander Novice
15. december 2006 - 01:22 #1
Din getValue returnerer en kopi af value, denne kopi kan du ikke skrive til.
Selv om du kunne, ville det ikke være det du ønsker, du vil skrive til value, derfor skal getValue returnere en reference til value.

#include <fstream>
#include <iostream>
using namespace std;

class test
{
private:
    char value;

public:
    char& getValue(void);
    friend ifstream& operator>>(ifstream&, test&);
};

char& test::getValue()
{
    return this->value;
}

istream& operator>>(istream& is, test& value)
{
    is >> value.getValue();
    return is;
}

int main()
{
  test T;
  cin >> T;
  cout << T.getValue() << endl;
}
Avatar billede kernelx Juniormester
15. december 2006 - 01:32 #2
if (svar)
{
  setPoints("bertelbrander", 200);
}
else
{
    cout "???\n";
}
Avatar billede bertelbrander Novice
15. december 2006 - 01:37 #3
#define ??? "Lav selv et svar og accepter det"
Avatar billede bertelbrander Novice
15. december 2006 - 01:46 #4
Man kan godt indvende at det ikke er specielt "kønt" at en get metode giver mulighed for at modificere objektet.

Man kunne løse det ved at lave en set metode, hvilket ville kræve en mellem variabel i >> operatoren. Eller man kunne lade >> operatoren tilgå value direkte.
Avatar billede kernelx Juniormester
15. december 2006 - 11:18 #5
hvis jeg bruger << og >> i stedet for fileHandler.write() og fileHandler.read() - er det så muligt at ændre
offset-positionen? altså noget lignene som seek?
Avatar billede kernelx Juniormester
15. december 2006 - 11:52 #6
pga. at det er et nyt spørgsmål - svar helst på
http://www.eksperten.dk/spm/750932
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester