Avatar billede kvinther Nybegynder
04. juni 2003 - 20:23 Der er 3 kommentarer og
2 løsninger

Ofstream wrapper klasse

Er det muligt at nedarve fra en af c++'s stream-classer?

Jeg kunne godt tænke mig at lave noget alla,

    class LogObject : public ofstream { ... };

således så jeg kunne bruge '<<' til at skrive til mit objekt f.eks.:

    LogObject log("filnavn");
    log << "Hello verden!" << endl;

Dvs. det skal virke som en normal ofstream, men så ville jeg addere nogle ekstra funktioner i min klasse.

Jeg har siddet og roddet med det, men kan ikke rigtigt få det til at virke. Nogen forslag?
Avatar billede arne_v Ekspert
04. juni 2003 - 20:43 #1
Det burde godt kunne lade sig gøre !
Avatar billede driis Nybegynder
04. juni 2003 - 20:45 #2
?

Det her virker fint:

#ifndef F
#define F

#include <iostream>
#include <fstream>

using namespace std ;

class Log : public ofstream
{
};

#endif

Og testprogram :

#include "f.h"

int main()
{
    Log l ;
    l.open("mindata.fil") ;
    l << "data ;-)" ;

}
Avatar billede arne_v Ekspert
04. juni 2003 - 20:50 #3
#include <fstream>

using namespace std;

class myofstream : public ofstream {
    public:
        myofstream(char *fnm) : ofstream(fnm) { }
        void helloworld() { *this << "Hello world !" << endl; }
};

int main()
{
  myofstream f("z.dat");
  f << "Linie 1" << endl;
  f.helloworld();
  f << "Linie 3" << endl;
  return 0;
}

giver:

C:\>g++ inher.cpp -o inher.exe

C:\>inher

C:\>type z.dat
Linie 1
Hello world !
Linie 3
Avatar billede kvinther Nybegynder
05. juni 2003 - 00:13 #4
Yessør!

Jeg havde næsten det samme, men jeg havde oprettet log'en via en pointer i main, som i
Avatar billede kvinther Nybegynder
05. juni 2003 - 00:19 #5
UPS, prøver lige igen.

Jeg havde næsten det samme, men jeg havde oprettet log'en via en pointer i main, som i

LogObject *_log = new LogObject("out2.txt");

Her fik jeg fejl når jeg prøvede at bruge '<<', men jeg havde selvfølgelig glemt '*'. Der skulle selvfølgelig havde stået:

*_log << "Crisp" << endl;

Tak for hjælpen, jeg deler pointene mellem jer hvis det er ok?
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