Forum: C++, I/O?

Forum huvudsida -> Programmering -> C++, I/O?

Sidor: 1

Till botten

olle 13:46 - 13:e Augusti 2006 | Post #1
Medlem
Inlägg: 57


Skicka PM
Hej igen.

Har kommit till filhantering och undra om jag kan få lite hjälp.

Jag vet att det finns istream & ostream som hanterar strömmar(vad de nu innebär). Och det finns ofstream & ifstream som hanterar filer.

  1.  
  2. #include<iostream>
  3. //#include <istream>
  4. //#include <ostream>
  5. #include <fstream>
  6.  
  7. void f( istream & input, ostream & output ) {
  8. int n;
  9. output << "enter a number: ";
  10. input >> n;
  11. cout << n << endl;
  12. }
  13. int main(){
  14.  
  15. ifstream inFile1("nr");
  16. ofstream inFile2("test");
  17. f(inFile1,cout);
  18. return 0;
  19. }


Min fråga är varför räcker det inte med och bara använda ifsream & ofstream när det andå fungera med detta:

  1.  
  2. void g( ifstream & input, ofstream & output ) {
  3. int n;
  4. output << "enter a number: ";
  5. input >> n;
  6. }



Det jag inte förstår varför i en uppgift så har man deklarerat ifstream & ofstream i main() och sen använt istream & ostream som funktionsparametrar?? ,,r det pga att istream är bas till ifstream och ej kan användas till och deklarera?

Tror det blev lite snurrigt. Men hoppas ni fattar vad jag menar. ,,r helt enkelt lite förvirrad.

ha de gött

-------------------------
Ingen signatur!



Lajnold 16:41 - 13:e Augusti 2006 | Post #2
Medlem
Inlägg: 65


Skicka PM
Det är för att inte begränsa sig till filer, eller ifstream/ofstream-objekt. Genom att använda istream och ostream som typer så kan alla strömmar ärvda därifrån användas som argument till funktionen. Ditt exempel skulle inte ha fungerat om det skulle ha stått ofstream istället för ostream i funktionen eftersom cout är av typen ostream, inte ofstream.

-------------------------
Ingen signatur!



olle 18:19 - 13:e Augusti 2006 | Post #3
Medlem
Inlägg: 57


Skicka PM
börjar fatta lite bättre med din föklaring Smiley

Det jag förstått nu är som tumregel så brukar man deklarera med ifstream och ofstream tex i main() sen använda sig utav istream och ofstream i funktionsparameter för att kunna använda sig utav alla ärvda klasser som du nämnde, stämmer det?

Sen ordet strömmar, förstår jag inte riktigt. ,,r det samma sak som filer kanske?

tack för hjälpen

-------------------------
Ingen signatur!



Lajnold 18:55 - 13:e Augusti 2006 | Post #4
Medlem
Inlägg: 65


Skicka PM
Anledningen till att man vanligtvis använder ofstream eller ifstream istället för ostream och istream är att ostream och istream inte har rätt funktionalitet. fstream-klasserna ärver av ostream och istream, och lägger sedan till funktioner för att underlätta filhantering.

Att man använder ostream/istream som argument istället för ofstream/ifstream tror jag vanligtvis beror på att man vill kunna skicka cout eller cin som argument. Men det du skrev stämmer. Det är alltså för att kunna skicka både (o/i)stream och (of/if)stream. Och andra ärvande klasser.

Och strömmar är vanligtvis filer, men kan nog egentligen vara allt som man skickar information till som sedan vidarebefodrar den.


Det jag skriver är inte nödvändigtvis helt rätt. Delar av det är vad jag har läst, och hur jag minns dessa saker. Andra är hur jag tror det är, baserat på andra kunskaper gällande programmering.

-------------------------
Ingen signatur!

Senast redigerad 19:06 - 13:e Augusti 2006


olle 19:03 - 13:e Augusti 2006 | Post #5
Medlem
Inlägg: 57


Skicka PM
tack för informationen. Fick lite panik innan pga att det finns så många klasser av nästan samma namn Smiley

Men nu förstår jag iallfall

ha de gött

-------------------------
Ingen signatur!



Sidor: 1

Forum huvudsida -> Programmering -> C++, I/O?
Atom feed

Du får inte posta i den här tråden | Till toppen