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
Last revisionBoth sides next revision
cpp:streams [2019/05/14 12:34] – [Standard Streams] gthanoscpp:streams [2020/05/17 17:53] gthanos
Line 1: Line 1:
 ====== I/O Streams ====== ====== I/O Streams ======
  
-Ένα //stream// είναι μία ακολουθία χαρακτήρων θεωρητικά άπειρου μεγέθους. Ένα //stream// μπορεί να χρησιμοποιηθεί για ανάγνωση από μία πηγή (π.χ. stdin, αρχείο, απομακρυσμένο αρχείο σε άλλο υπολογιστή ή το διαδίκτυο κλπ) ή για εγγραφή σε ένα προορισμό (π.χ. stdout, αρχείο στο σκληρό δίσκοαπομακρυσμένο αρχείο)+Η C++ εισάγει την έννοια του //stream//, ως μία ακολουθία χαρακτήρων θεωρητικά άπειρου μεγέθους. Οι χαρακτήρες: 
 +  * εισάγονται στο //stream// με συγκεκριμένη σειρά και γράφονται σε ένα αρχείο, σε ένα socket ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν. 
 +  * διαβάζονται από ένα αρχείο, από ένα socket ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι ή με τη σειρά που εισήχθησαν στη συσκευή.
  
-Ένα //stream// εισόδου (//**input stream**//) χρησιμοποιείται για ανάγνωση από μία πηγή. Η ανάγνωση γίνεται με τη βοήθεια του **extraction operator (>>)**Αντίστοιχαένα //stream// εξόδου (//**output stream**//) για εγγραφή προς ένα προορισμό. Η εγγραφή πραγματοποιείται με τη βοήθεια του **insertion operator (<<)**. Εκτός των παραπάνω υπάρχουν τα //streams// εισόδου και εξόδου τα οποία έχουν τη δυνατότητα παράλληλης ανάγνωσης και εγγραφής. Τα //streams// αυτής της κατηγορίας χρησιμοποιούν και τους δύο παραπάνω τελεστές.+Βασικά χαρακτηριστικά των //streams// είναι τα εξής: 
 +  - Ένα //stream// μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα //streams// παρέχουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν ανεξάρτητα από το μέσο επικοινωνίας ή αποθήκευσηςΕάν μία κλάση μπορεί να γράψει σε ένα //stream// τότε μπορεί να γράψει σε όλους τους πιθανούς προορισμούς (αρχείο, socket, κονσόλα, κλπ) για τους οποίους μπορούμε να ανοίξουμε ένα //stream// ανάγνωσης ή εγγραφής. 
 +  - Από την //standard// βιβλιοθήκη παρέχονται  συναρτήσεις υπερφόρτωσης, ώστε να μπορούμε να γράψουμε σε αυτά και να διαβάσουμε από αυτά τους βασικούς τύπους δεδομένων (int, double, std::string κλπ). Για τους τύπους που θα δημιουρήσετε εσείς στα προγράμματα σας, μπορείτε να υπερφορτώσετε τους τελεστές %%>>%% και %%<<%% για είσοδο και έξοδο προς οποιοδήποτε //stream//. Η χρήση των τελεστών %%>>%% και %%<<%%  σε ένα πρόγραμμα, απλοποιεί εξαιρετικά τον κώδικα για να γράψουμε σε ένα //stream// ή να διαβάσουμε από αυτό.
  
-===== Standard Streams =====+Ένα //stream// μπορεί να είναι: 
 +  * **//stream// εισόδου:**, μπορεί να χρησιμοποιηθεί για ανάγνωση από μία πηγή (π.χ. //stdin//, αρχείο, απομακρυσμένο αρχείο σε άλλο υπολογιστή). Τα //streams// εισόδου χρησιμοποιούν τον τελεστη %%>>%% (//stream extraction operator//) για ανάγνωση.  
 +  * **//stream// εξόδου:**, μπορεί να χρησιμοποιηθεί για εγγραφή σε ένα προορισμό (π.χ. //stdout//, αρχείο στο σκληρό δίσκο, απομακρυσμένο αρχείο). τα //streams// εξόδου χρησιμοποιούν τον τελεστη %%<<%% (//stream insertion operator//) για εγγραφή. 
 +  * **//stream// εισόδου και εξόδου:** Μπορεί να χρησιμοποιηθεί ταυτόχρονα και για τις δύο παραπάνω λειτουργίες.
  
-H C++ έρχεται με μία σειρά από //standard streams//, τα οποία είναι τα εξής:+Στην παρακάτω εικόνα δίνεται η βασική διάρθρωση των //streams// της C++, όπου φαίνονται και οι μεταξύ τους σχέσεις κληρονομικότητας. Κάτω από το όνομα κάθε κλάσης αναφέρεται το όνομα του αρχείου στο οποιό δηλώνεται το //prototype// της. 
 + 
 +{{  :cpp:cpp_io_library.png  |}} 
 + 
 +===== Αλληλεπίδραση με τη βασική είσοδο και έξοδο ===== 
 + 
 +H C++ έρχεται με μία σειρά από έτοιμα //streams// για αλληλεπίδραση με την κονσόλα. Τα //streams// αυτά είναι τα εξής:
   * **std::cin:** Stream για διάβασμα από το πληκτρολόγιο (//stdin//).   * **std::cin:** Stream για διάβασμα από το πληκτρολόγιο (//stdin//).
   * **std::cout:** Stream για γράψιμο στο //stdout//.   * **std::cout:** Stream για γράψιμο στο //stdout//.
Line 13: Line 26:
   * **std::clog:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι buffered.   * **std::clog:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι buffered.
  
- +===== Παράδειγμα χρήσης διαβάσματος στο cin και γραψίματος στα cout και cerr =====
-===== Παράδειγμα χρήσης stream =====+
  
 <code cpp ReadHeight.cpp> <code cpp ReadHeight.cpp>
cpp/streams.txt · Last modified: 2020/05/17 16:53 (external edit)