Using the Standard Streams

Три определенных потока всегда доступны всюду в C ++ программах. Это standard input, standard output, and standard error потоки. У каждого из этих стандартных потоков есть определенное использование. Стандартный input поток читает данные из консоли, стандартный output поток записывает данные в консоль, и стандартный error поток показывает сообщения об ошибке.

Программисты получают доступ к стандартным потокам через ряд объектов. Объекты cin и cout обеспечивают доступ к стандартным потокам ввода и выхода, соответственно. Объект cerr обеспечивает доступ к стандартному ошибочному потоку. Распечатка 2 демонстрирует использование трех стандартных потоков.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: cout << "Enter your name and age: "; string name;int age; cin >> name >> age; if (age < 0) { cerr << " Invalid age entered";}else { cout << " " << name << " is " << age;}
Listing 2 Standard output and the << operator

 

Программисты не должны явно открывать и закрывать три стандартных потока. Эти потоки автоматически доступны для использования (через их соответствующие объекты), когда программа начинает выполнение. Программист должен явно открывать и закрывать все другие потоки входа и выхода.

Программист может определить, как классы, которые они создают, взаимодействуют с потоками, используя << и >> операторы. Их называют перегруженными операторами.

Мы можем также определить поведение этих операторов для классов, которые мы создаем. Это позволяет коду ввода и вывода для определенных пользователем классов напоминать ввод и вывод для встроенных типов.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: class Person {private: string first_name; string last_name; string job; public: Person (string f, string l, string j) : first_name(f), last_name(l), job(j) {} friend ostream& operator<<(ostream& os, Person const& r); }; ostream& operator<<(ostream& os, Person const& r) { os << r.first_name << " " << r.last_name; os << " works as a " << r.job; return os;}
Listing 3 A class that overloads <<

Распечатка 3 определяет класс Person . Так как мы хотели бы произвести объекты Person класса тот же самый способ, которым мы производим целые числа или последовательности, мы перегружаем << оператор. Объявляя эту функцию, поскольку функция "friend" в линии 11 позволяет функции получать доступ к частным членам данных Person класса. Это необходимо, так как перегруженная функция оператора не член Person класса.

1: 2: Person p("Stan", "Dardeviation", "Math Teacher");cout << p << endl;
Listing 4 Using class Person

Продукция линии 2 в Распечатке 4 следует.

Stan Dardeviation works as a Math Teacher
Example 1 Output of Listing 4