Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Klasa za upis i citanje datoteke?

[es] :: C/C++ programiranje :: Klasa za upis i citanje datoteke?

[ Pregleda: 3935 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Iznogud
Subotica

Član broj: 1721
Poruke: 212
217.26.75.*



Profil

icon Klasa za upis i citanje datoteke?15.09.2002. u 22:49 - pre 231 meseci
Recimo da postoji seledeca situacija:
Imamo osnovnu klasu osoba i klase student i profesor koje su naslednice klase osoba. Dakle skolski primer.
Treba oformiti zajednicku datoteku u koju ce se upisivati i profesori i studenti i naravno iscitavati iz nje.
Problem je kako vrsiti to citanje odnosno upisivanje.
Da se razumemo, nije problem u kodu nego u samom projektovanju klasa.
Da li je bolje kreiratu posebnu klasu za upis i citanje datoteke (i kako??), ili kreirati posebne metode za citanje i pisanje unutar samih klasa profesor i student ili pak kompletan posao upisa i citanja vrsiti iz glavnog programa ( ovo mi ne izgleda u duhu OOP)?

P.S.Ako neko ima primer klasa sa citanjem i pisanjem datoteku moze mi poslati na mail.


 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



+6 Profil

icon Re: Klasa za upis i citanje datoteke?15.09.2002. u 23:04 - pre 231 meseci
Moj predlog ti je da preklopiš operatore << i >> za sve tri klase.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Klasa za upis i citanje datoteke?16.09.2002. u 02:19 - pre 231 meseci
I moj.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Iznogud
Subotica

Član broj: 1721
Poruke: 212
217.26.75.*



Profil

icon Re: Klasa za upis i citanje datoteke?16.09.2002. u 23:14 - pre 231 meseci
OK.
A da li je ovo preklapanje operatora << i >> za klasu student u redu?

ofstream& operator<< (ofstream& out, const student& s) {
out.write((char*)&s,sizeof(s));
return out;
}

ifstream& operator>> (ifstream& in, const student& s) {
in.read((char*)&s,sizeof(s));
return in;
}
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Klasa za upis i citanje datoteke?16.09.2002. u 23:29 - pre 231 meseci
Ne, naopako!!!

Moraš da svaki član klase zapišeš ponaosob uz pomoć operatora << i da posle čitaš svaki član istim redosledom pomoću operatora >>.
 
Odgovor na temu

Iznogud
Subotica

Član broj: 1721
Poruke: 212
*.173.EUnet.yu



Profil

icon Re: Klasa za upis i citanje datoteke?17.09.2002. u 10:56 - pre 231 meseci
Citat:

Moraš da svaki član klase zapišeš ponaosob uz pomoć operatora << i da posle čitaš svaki član istim redosledom pomoću operatora >>.

E sad mi tu nesto nije jasno.
Kada ja upisujem sa "out.write((char*)&s,sizeof(s))" tada se u datoteku zapisuje onoliko znakova koliko je s tj sizeof(s) (ako je ime studenta definisano kao char[20] a unesemo ime od 15 zankova i onoh dodatnih 5 ce biti upisano u datoteku i ako to nije deo imena.
Medjutim kada preklopim operator << ovako:
ofstream& operator<< (ofstream& out,const student& s) {
out<<s.ime;
out<<s.datrod;
out<<s.index;
return out;
}
u datoteku se upisije samo onliko znakova imena koliko je i uneto (bez onih dodatnih 5).
Sad mi nije jasno kako preklopiti operator >>. Ovako ne moze:
ifstream& operator>> (ifstream& in,student& s) {
in>>s.ime;
in>>s.datrod;
in>>s.index;
return in;
}
jer otkud prevodilac moze znati kolika je duzina imena (kada je upisano onoliko zankova koliko je uneto.
Gde pravim gresku???
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 799
*.ppp-bg.sezampro.yu



+62 Profil

icon Re: Klasa za upis i citanje datoteke?18.09.2002. u 00:21 - pre 231 meseci
Evo sta treba da radis.
1) Preklopis operatore za sve tri klase, ili kako ja volim da kazem napravis virtuelne metode In i Out u klasi Osoba, a zatim ih override-ujes u klasama Student i Profesor.
2) Pretpostavljam da imas klasu "polimorfni kontejner" (u daljem tekstu Kontejner) za instance klase Osoba. "Polimorfni" znaci da Itemi tog kontejnera mogu biti i instance klase Osoba, kao i instance klase Student i Profesor (jasno, jer to su izvedene klase od klase Osoba). Sve svoje Item-e Kontejner "vidi" kao instance klase Osoba (zato i jeste polimorfni).
3) Prilikom upisivanja u fajl, klasa Kontejner za svaki svoj Item upise jednoznacni identifikator klase tog Item-a (neki integer, ili string - classname; svejedno), zatim kaze tom Item-u da se ispise pozivom Osoba->Out(). Obratite paznju da ce poziv Osoba->Out() izvrsiti: 1) bas Osoba->Out() ili 2) Student->Out() ili 3) Profesor->Out(), u zavisnosti od klase tekuceg Item-a. Postupak se ponavlja dok se svi Item-i ne ispisu.
4) Citanje fajla. Kontejner klasa prvo izvrsi jedan Clear() za brisanje svih svojih postojecih Item-a. Zatim se redom: 1) iz fajla cita identifikator klase Item-a koji sledi; 2) Kontejner kreira odgovarajuci Item prema tom identifikatoru i 3) Kontejner zatim kaze tom Item-u da se procita pozivom metode Osoba->In(). Razume se da ce se izvrsiti prava metoda od sledece tri: Osoba->In(), Student->In() ili Profesor->In(). Zatim se postupak ponavlja do kraja fajla (ili do nekog identifikatora kraja liste; jer to je upravo to: lista).
5) Kraj price.

Rajko
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.beg.sezampro.yu



+27 Profil

icon Re: Klasa za upis i citanje datoteke?18.09.2002. u 09:36 - pre 231 meseci
Operator >> definiši ovako:

Code:

ofstream&
operator<< (ofstream& out, const student& s)
{
out << s.ime << " ";
out << s.datrod << " ";
out << s.index << " ";
out << endl;
return out;
}


i onda će sve lepo da radi sa operatorom >> kakvim si ga definisao. Ono out << endl; nije neophodno, tu je čisto iz estetskih razloga (dobijaš pregledan fajl).
 
Odgovor na temu

[es] :: C/C++ programiranje :: Klasa za upis i citanje datoteke?

[ Pregleda: 3935 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.