Pa bez povratne vrednosti
Evo sastavio sam malu klasu kao primer.
Ima svega po malo , jedino nisam stigao da napisem komentare koda.
Namerno je koriscen stdio
i kompajluje se (u VC++6) sa 0 error(s), 0 warning(s)
Code:
#include <stdio.h>
class file
{
public:
file(); // prvi konstruktor
file(char*); // drugi konstruktor
file (const char *, const char *); // tvoj konstruktor
~file(); // destruktor
bool open(char*); // open funkcija
char* operator<<(int&); // operator za citanje, npr. ovaj <<
private:
FILE* f; // fajl pointer
char* buffer; // char pointer , ovo ce da nam bude buffer == memorija u koju upisujemo i iz koje citamo
};
file::file():f(0),buffer(0) // konstruktor , nema povratnu vrednost , nije npr. void file::flie() i nema return
{
}
file::file(char* name):f(0),buffer(0) // f(0),buffer(0) ovo znaci f = 0; buffer = 0;
{
if(name) // proveravamo pointer
f = fopen(name,"r"); // fopen funkcija za otvaranje fajla , mod r == read w == write ...
}
file::file (const char *ime_dat, const char *mod) :f(0),buffer(0) // tvoj konstruktor
{
if(ime_dat && mod)
f = fopen(ime_dat,mod);
}
bool file::open(char* name) // fn open
{
if(f) // ako je neki fajl otvoren
fclose(f); // zatvaramo ga
f = 0;
if(name)
f = fopen(name,"r"); // i pokusavamo da otvorimo ovaj novi
if(!f)
return false;
return true;
}
file::~file() // destruktor
{
if(f)
fclose(f); // zatvaramo fajl ako je otvoren
if(buffer)
delete[] buffer; // oslobadjamo memoriju ako je zauzeta
}
char* file::operator<<(int &ln) // operator za citanje , ova fn je mogla da se zove bilo kako ...
{
if(buffer)
delete[] buffer; // oslobadjamo memoriju ako smo je ranije rezervisali ...
buffer = 0; // oznacicemo da ovaj pointer nije iskoriscen
if(ln < 1 || !f)
{
ln = 0;
return buffer;
}
buffer = new char[ln+1]; // alociramo memoriju , za jedan bajt vecu zato sto cu kad citam tekst da stavim nulu na kraju
if(!buffer)
return buffer;
ln = fread(buffer,sizeof(char),ln,f); // funkcija za citanje , parametri : lokacija , merne jedinica , koliko da procita i fajl pointer
return buffer; // vracamo pokazivac na podatke, ova klasa se brine o potrebnoj memoriji , spolja vracamo samo pointer
}
int main()
{
char * txt; int ln = 10;
file* f = new file("C:\\txt.txt","rb");
if(f)
{
do{
txt = f->operator <<(ln); // citamo po 10 bajtova // ln je preneto po referenci i bice menjano u funkciji
if(ln){ // ovo obavezno proveriti , kad nista nije procitano ln je nula i vracen je null pointer
txt[ln] = 0; // kad radimo sa tekstom trebamo da obelezimo kraj teksta nulom
printf(txt); // ispisujemo
}
}while(ln > 0); // ln ce biti nula kad dodjemo do kraja fajla
delete f;
}
return 0;
}
[Ovu poruku je menjao Eurora3D Team dana 20.02.2009. u 03:30 GMT+1]