cpp:streams

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
cpp:streams [2020/05/17 16:53]
cpp:streams [2020/05/17 17:53]
gthanos
Line 1: Line 1:
 +====== I/O Streams ======
  
 +Η C++ εισάγει την έννοια του //stream//, ως μία ακολουθία χαρακτήρων θεωρητικά άπειρου μεγέθους. Οι χαρακτήρες:
 +  * εισάγονται στο //stream// με συγκεκριμένη σειρά και γράφονται σε ένα αρχείο, σε ένα socket ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν.
 +  * διαβάζονται από ένα αρχείο, από ένα socket ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι ή με τη σειρά που εισήχθησαν στη συσκευή.
 +
 +Βασικά χαρακτηριστικά των //streams// είναι τα εξής:
 +  - Ένα //stream// μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα //streams// παρέχουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν ανεξάρτητα από το μέσο επικοινωνίας ή αποθήκευσης. Εάν μία κλάση μπορεί να γράψει σε ένα //stream// τότε μπορεί να γράψει σε όλους τους πιθανούς προορισμούς (αρχείο, socket, κονσόλα, κλπ) για τους οποίους μπορούμε να ανοίξουμε ένα //stream// ανάγνωσης ή εγγραφής.
 +  - Από την //standard// βιβλιοθήκη παρέχονται  συναρτήσεις υπερφόρτωσης, ώστε να μπορούμε να γράψουμε σε αυτά και να διαβάσουμε από αυτά τους βασικούς τύπους δεδομένων (int, double, std::string κλπ). Για τους τύπους που θα δημιουρήσετε εσείς στα προγράμματα σας, μπορείτε να υπερφορτώσετε τους τελεστές %%>>%% και %%<<%% για είσοδο και έξοδο προς οποιοδήποτε //stream//. Η χρήση των τελεστών %%>>%% και %%<<%%  σε ένα πρόγραμμα, απλοποιεί εξαιρετικά τον κώδικα για να γράψουμε σε ένα //stream// ή να διαβάσουμε από αυτό.
 +
 +Ένα //stream// μπορεί να είναι:
 +  * **//stream// εισόδου:**, μπορεί να χρησιμοποιηθεί για ανάγνωση από μία πηγή (π.χ. //stdin//, αρχείο, απομακρυσμένο αρχείο σε άλλο υπολογιστή). Τα //streams// εισόδου χρησιμοποιούν τον τελεστη %%>>%% (//stream extraction operator//) για ανάγνωση. 
 +  * **//stream// εξόδου:**, μπορεί να χρησιμοποιηθεί για εγγραφή σε ένα προορισμό (π.χ. //stdout//, αρχείο στο σκληρό δίσκο, απομακρυσμένο αρχείο). τα //streams// εξόδου χρησιμοποιούν τον τελεστη %%<<%% (//stream insertion operator//) για εγγραφή.
 +  * **//stream// εισόδου και εξόδου:** Μπορεί να χρησιμοποιηθεί ταυτόχρονα και για τις δύο παραπάνω λειτουργίες.
 +
 +Στην παρακάτω εικόνα δίνεται η βασική διάρθρωση των //streams// της C++, όπου φαίνονται και οι μεταξύ τους σχέσεις κληρονομικότητας. Κάτω από το όνομα κάθε κλάσης αναφέρεται το όνομα του αρχείου στο οποιό δηλώνεται το //prototype// της.
 +
 +{{  :cpp:cpp_io_library.png  |}}
 +
 +===== Αλληλεπίδραση με τη βασική είσοδο και έξοδο =====
 +
 +H C++ έρχεται με μία σειρά από έτοιμα //streams// για αλληλεπίδραση με την κονσόλα. Τα //streams// αυτά είναι τα εξής:
 +  * **std::cin:** Stream για διάβασμα από το πληκτρολόγιο (//stdin//).
 +  * **std::cout:** Stream για γράψιμο στο //stdout//.
 +  * **std::cerr:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι unbuffered.
 +  * **std::clog:** Stream για γράψιμο στο //stderr//. To συγκεκριμένο stream είναι buffered.
 +
 +===== Παράδειγμα χρήσης διαβάσματος στο cin και γραψίματος στα cout και cerr =====
 +
 +<code cpp ReadHeight.cpp>
 +#include <iostream>
 +using namespace std;
 +
 +int main() {
 +  double height;
 +
 +  do {
 +    cout << "Enter your height (in meters): ";
 +    cin >> height;
 + 
 +    if(height > 0)
 +      break;
 +      
 +    cerr << "Invalid height. Try again..." << endl;
 +  } while(true);
 +  
 +  cout << "You height is: " << height << " meters." << endl;
 +}
 +</code>
cpp/streams.txt · Last modified: 2020/05/17 16:53 (external edit)