User Tools

Site Tools


cpp:streams

I/O Streams

Η C++ εισάγει την έννοια του stream, ως μία ακολουθία χαρακτήρων θεωρητικά άπειρου μεγέθους. Οι χαρακτήρες:

  • εισάγονται στο stream με συγκεκριμένη σειρά και γράφονται σε ένα αρχείο, σε ένα socket ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν.
  • διαβάζονται από ένα αρχείο, από ένα socket ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι ή με τη σειρά που εισήχθησαν στη συσκευή.

Βασικά χαρακτηριστικά των streams είναι τα εξής:

  1. Ένα stream μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα streams παρέχουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν ανεξάρτητα από το μέσο επικοινωνίας ή αποθήκευσης. Εάν μία κλάση μπορεί να γράψει σε ένα stream τότε μπορεί να γράψει σε όλους τους πιθανούς προορισμούς (αρχείο, socket, κονσόλα, κλπ) για τους οποίους μπορούμε να ανοίξουμε ένα stream ανάγνωσης ή εγγραφής.
  2. Από την standard βιβλιοθήκη παρέχονται συναρτήσεις υπερφόρτωσης, ώστε να μπορούμε να γράψουμε σε αυτά και να διαβάσουμε από αυτά τους βασικούς τύπους δεδομένων (int, double, std::string κλπ). Για τους τύπους που θα δημιουρήσετε εσείς στα προγράμματα σας, μπορείτε να υπερφορτώσετε τους τελεστές >> και << για είσοδο και έξοδο προς οποιοδήποτε stream. Η χρήση των τελεστών >> και << σε ένα πρόγραμμα, απλοποιεί εξαιρετικά τον κώδικα για να γράψουμε σε ένα stream ή να διαβάσουμε από αυτό.

Ένα stream μπορεί να είναι:

  • stream εισόδου:, μπορεί να χρησιμοποιηθεί για ανάγνωση από μία πηγή (π.χ. stdin, αρχείο, απομακρυσμένο αρχείο σε άλλο υπολογιστή). Τα streams εισόδου χρησιμοποιούν τον τελεστη >> (stream extraction operator) για ανάγνωση.
  • stream εξόδου:, μπορεί να χρησιμοποιηθεί για εγγραφή σε ένα προορισμό (π.χ. stdout, αρχείο στο σκληρό δίσκο, απομακρυσμένο αρχείο). τα streams εξόδου χρησιμοποιούν τον τελεστη << (stream insertion operator) για εγγραφή.
  • stream εισόδου και εξόδου: Μπορεί να χρησιμοποιηθεί ταυτόχρονα και για τις δύο παραπάνω λειτουργίες.

Στην παρακάτω εικόνα δίνεται η βασική διάρθρωση των streams της C++, όπου φαίνονται και οι μεταξύ τους σχέσεις κληρονομικότητας. Κάτω από το όνομα κάθε κλάσης αναφέρεται το όνομα του αρχείου στο οποιό δηλώνεται το prototype της.

Αλληλεπίδραση με τη βασική είσοδο και έξοδο

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

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;
}
cpp/streams.txt · Last modified: 2020/05/17 16:53 (external edit)