Выше в этой главе вы узнали, как перегружать операторы ввода и вывода для собственных классов, а также как создавать собственные манипуляторы. В приведенных выше примерах программ выполнялись только операции консольного ввода-вывода. Но поскольку все С++-потоки одинаковы, одну и ту же перегруженную функцию вывода данных, например, можно использовать для вывода информации как на экран, так и в файл, не внося при этом никаких существенных изменений. Именно в этом и заключаются основные достоинства С++-системы ввода-вывода.

В следующей программе используется перегруженный (для класса three_d) оператор вывода для записи значений координат в файл threed.

/* Использование перегруженного оператора ввода-вывода для записи объектов класса three_d в файл.

*/

#include

#include

using namespace std;

class three_d {

  int x, y, z; // 3-мерные координаты; они теперь закрыты

 public:

  three_d(int a, int b, int с) { x = a; у = b; z = c; }

  friend ostream &operator<<(ostream &stream, three_d obj); /* Отображение координат X, Y, Z (оператор вывода для класса three_d). */

};

ostream &operator<<(ostream &stream, three_d obj)

{

 stream << obj.x << ", ";

 stream << obj.у << ", ";

 stream << obj.z << "\n";

 return stream; // возвращает поток

}

int main()

{

 three_d a(1, 2, 3), b(3, 4, 5), c(5, 6, 7);

 ofstream out("threed");

 if(!out) {

  cout << "He удается открыть файл.";

  return 1;

 }

 out << a << b << c;

 out.close();

 return 0;

}

Если сравнить эту версию операторной функции вывода данных для класса three_d с той, что была представлена в начале этой главы, можно убедиться в том, что для "настройки" ее на работу с дисковыми файлами никаких изменений вносить не пришлось. Если операторы ввода и вывода определены корректно, они будут успешно работать с любым потоком.

Важно!Прежде чем переходить к следующей главе, не пожалейте времени и поработайте с С++-функциями ввода-вывода. Создайте собственный класс, а затем определите для него операторы ввода и вывода. А еще создайте собственные манипуляторы.

<p id="chapter 19">Глава 19: Динамическая идентификация типов и операторы приведения типа</p>

В этой главе рассматриваются два средства C++, которые поддерживают современное объектно-ориентированное программирование: динамическая идентификация типов (run-time type identification - RTTI) и набор дополнительных операторов приведения типа. Ни одно из этих средств не было частью оригинальной спецификации C++, но оба они были добавлены с целью усиления поддержки полиморфизма времени выполнения. Под RTTI понимается возможность проведения идентификации типа объекта во время выполнения программы. Рассматриваемые здесь операторы приведения типа предлагают программисту более безопасные способы выполнения этой операции. Как будет показано ниже, один из них, dynamic_cast, непосредственно связан с RTTI-идентификацией, поэтому операторы приведения типа и RTTI имеет смысл рассматривать в одной главе.

Динамическая идентификация типов (RTTI)
Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги