User Tools

Site Tools


cpp:streams

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:streams [2019/05/22 08:40] – [I/O Streams] gthanoscpp:streams [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
 ====== I/O Streams ====== ====== I/O Streams ======
  
-Η C++ εισάγει την έννοια του //stream//, ως μία ακολουθία από χαρακτήρες οι οποίοι μπορούν+Η C++ εισάγει την έννοια του //stream//, ως μία ακολουθία χαρακτήρων θεωρητικά άπειρου μεγέθους. Οι χαρακτήρες
-  * να εισαχθούν στο //stream// με συγκεκριμένη σειρά και να γραφούν σε ένα αρχείο ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν. +  * εισάγονται στο //stream// με συγκεκριμένη σειρά και γράφονται σε ένα αρχείο, σε ένα socket ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν. 
-  * να διαβαστούν από ένα αρχείο ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι ή με τη σειρά που εισήχθησαν στη συσκευή.+  * διαβάζονται από ένα αρχείο, από ένα socket ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι ή με τη σειρά που εισήχθησαν στη συσκευή.
  
 Βασικά χαρακτηριστικά των //streams// είναι τα εξής: Βασικά χαρακτηριστικά των //streams// είναι τα εξής:
-  - Ένα //stream// μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα //streams// δίνουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν για οποιοδήποτε μέσο επικοινωνίας ή αποθήκευσης. Εάν μία κλάση μπορεί να γράψει σε ένα //stream// τότε μπορεί να γράψει σε όλα τα πιθανά //streams//. +  - Ένα //stream// μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα //streams// παρέχουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν ανεξάρτητα από το μέσο επικοινωνίας ή αποθήκευσης. Εάν μία κλάση μπορεί να γράψει σε ένα //stream// τότε μπορεί να γράψει σε όλους τους πιθανούς προορισμούς (αρχείο, socket, κονσόλα, κλπ) για τους οποίους μπορούμε να ανοίξουμε ένα //stream// ανάγνωσης ή εγγραφής
-  - Τα //streams// δουλεύουν αυτόματα με τους βασικούς τύπους δεδομένων. Για τους αναφορικούς τύπους μπορείτε να υπερφορτώσετε τους τελεστές %%>>%% και %%<<%% για είσοδο από το //stream// και έξοδο προς το //stream// αντίστοιχα. Η χρήση των τελεστών %%>>%% και %%<<%% απλοποιεί εξαιρετικά τον κώδικα για να γράψουμε σε ένα //stream// ή να διαβάσουμε από αυτό.+  - Από την //standard// βιβλιοθήκη παρέχονται  συναρτήσεις υπερφόρτωσης, ώστε να μπορούμε να γράψουμε σε αυτά και να διαβάσουμε από αυτά τους βασικούς τύπους δεδομένων (int, double, std::string κλπ). Για τους τύπους που θα δημιουρήσετε εσείς στα προγράμματα σαςμπορείτε να υπερφορτώσετε τους τελεστές %%>>%% και %%<<%% για είσοδο και έξοδο προς οποιοδήποτε //stream//. Η χρήση των τελεστών %%>>%% και %%<<%%  σε ένα πρόγραμμα, απλοποιεί εξαιρετικά τον κώδικα για να γράψουμε σε ένα //stream// ή να διαβάσουμε από αυτό.
  
- +Ένα //stream// μπορεί να είναι: 
-Μπορείτε να σκέφτεστε τα //streams// ως ακολουθίες χαρακτήρων θεωρητικά άπειρου μεγέθους. Ένα //stream// μπορεί να είναι: +  * **//stream// εισόδου:**, μπορεί να χρησιμοποιηθεί για ανάγνωση από μία πηγή (π.χ. //stdin//, αρχείο, απομακρυσμένο αρχείο σε άλλο υπολογιστή). Τα //streams// εισόδου χρησιμοποιούν τον τελεστη %%>>%% (//stream extraction operator//) για ανάγνωση.  
-  * **//stream// εισόδου:**, μπορεί να χρησιμοποιηθεί για ανάγνωση από μία πηγή (π.χ. //stdin//, αρχείο, απομακρυσμένο αρχείο σε άλλο υπολογιστή). Τα //streams// εισόδου χρησιμοποιούν τον τελεστη ''<<'' (//stream extraction operator//) για ανάγνωση.  +  * **//stream// εξόδου:**, μπορεί να χρησιμοποιηθεί για εγγραφή σε ένα προορισμό (π.χ. //stdout//, αρχείο στο σκληρό δίσκο, απομακρυσμένο αρχείο). τα //streams// εξόδου χρησιμοποιούν τον τελεστη %%<<%% (//stream insertion operator//) για εγγραφή.
-  * **//stream// εξόδου:**, μπορεί να χρησιμοποιηθεί για εγγραφή σε ένα προορισμό (π.χ. //stdout//, αρχείο στο σκληρό δίσκο, απομακρυσμένο αρχείο). τα //streams// εξόδου χρησιμοποιούν τον τελεστη ''<<'' (//stream insertion operator//) για εγγραφή.+
   * **//stream// εισόδου και εξόδου:** Μπορεί να χρησιμοποιηθεί ταυτόχρονα και για τις δύο παραπάνω λειτουργίες.   * **//stream// εισόδου και εξόδου:** Μπορεί να χρησιμοποιηθεί ταυτόχρονα και για τις δύο παραπάνω λειτουργίες.
  
-Στην παρακάτω εικόνα δίνεται η βασική διάρθρωση των //streams// της C++, όπου φαίνονται και οι μεταξύ τους σχέσεις κληρονομικότητας. Κάτω από το όνομα κάθε κλάσης αναφέρεται το όνομα του αρχείου στο οποιό δηλώνεται το //prototype// της+Στην παρακάτω εικόνα δίνεται η βασική διάρθρωση των //streams// της C++, όπου φαίνονται και οι μεταξύ τους σχέσεις κληρονομικότητας. Κάτω από το όνομα κάθε κλάσης αναφέρεται το όνομα του αρχείου στο οποιό δηλώνεται το //prototype// της.
  
 {{  :cpp:cpp_io_library.png  |}} {{  :cpp:cpp_io_library.png  |}}
 +
 ===== Αλληλεπίδραση με τη βασική είσοδο και έξοδο ===== ===== Αλληλεπίδραση με τη βασική είσοδο και έξοδο =====
  
Line 25: Line 25:
   * **std::cerr:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι unbuffered.   * **std::cerr:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι unbuffered.
   * **std::clog:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι buffered.   * **std::clog:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι buffered.
- 
  
 ===== Παράδειγμα χρήσης διαβάσματος στο cin και γραψίματος στα cout και cerr ===== ===== Παράδειγμα χρήσης διαβάσματος στο cin και γραψίματος στα cout και cerr =====
cpp/streams.1558514451.txt.gz · Last modified: 2019/05/22 07:40 (external edit)