Шаг 9.
Перегрузка операции вывода (окончание)

    На этом шаге мы закончим рассматривать перегрузку операции вывода.

    Как показано на предыдущем шаге, перегрузка операции вывода << позволяет не только организовать с ее помощью вывод значений пользовательских типов, но и обеспечивает программиста широкими возможностями оформления результатов. К сожалению, расширить действие операции можно только на пользовательские типы и поэтому невозможно непосредственно изменить формат вывода какого-либо из базовых типов. Например, не удастся ввести процедуру operator << (), с помощью которой при использовании операнда типа char * в стандартный поток будет выводиться и длина символьной строки, и ее содержимое.

    Чтобы решить указанную задачу, необходимо определить структуру, компонентами которой будут связанный со строкой указатель char * и целая переменная со значением, равным длине строки. Вот для такой структуры перегрузка операции вывода << вполне допустима. В следующей программе это реализовано:

//OOР9_1.СРР - вывод информации о структуре-строке.
#include <iostream.h>
#include <string.h> // Для работы со строковыми функциями.
//Определение класса (пользовательского типа):
struct string
{ 
   int length;
   char line[80];
};
// Прототип операции-функции для перегрузки операции <<:
ostream& operator << (ostream& out, string str);
void main()
{ 
  string st;       // Объект st класса string.
  strcpy(st.line,"Содержимое строки.");
  st.length = strlen(st.line);
  cout << st;
}
ostream&  // Тип возвращаемого значения.
	 operator << (ostream& out, string str)
{ 
  out << "\n Длина строки: " << str.length;
  out << "\n Значение строки: " << str.line;
  return out;
}
Текст этой программы можно взять здесь.

    Результат выполнения программы:

    Длина строки: 18
    Значение строки: Содержимое строки.

    Отметим, что в файле с тестом программы определение операции-функции помещено ниже, чем обращение к ней. Поэтому в вызывающую программу пришлось поместить прототип операции-функции.

    На следующем шаге мы рассмотрим перегрузку операции ввода.




Предыдущий шаг Содержание Следующий шаг