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

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

   
Как показано на предыдущем шаге, перегрузка операции вывода << позволяет не только организовать с ее
помощью вывод значений пользовательских типов, но и обеспечивает программиста широкими возможностями оформления результатов.
К сожалению, расширить действие операции можно только на пользовательские типы и поэтому невозможно непосредственно изменить
формат вывода какого-либо из базовых типов. Например, не удастся ввести процедуру 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
    Значение строки: Содержимое строки.

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий