КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Оператор помещения в поток
ОПЕРАЦИИ ПОМЕЩЕНИЯ И ИЗВЛЕЧЕНИЯ ИЗ ПОТОКА Простота и последовательность Расширяемость для новых типов Простая строка Безопасность типов Давайте сравним вызов функций stdio с использованием стандартных потоков. Вызов stdio для чтения выглядит следующим образом: int i = 25; char name [ ] = "Простая строка"; fprintf (stdout, "%d \t%s", i, name); Он правильно напечатает: Однако, если вы по невнимательности поменяете местами аргументы для fprintf (), ошибка обнаружится только во время исполнения программы. Может произойти все что угодно: от странного вывода до краха системы. Этого не может случиться в случае использования стандартных потоков: cout << i<<’\t’<< name << '\n'; Так как имеются перегруженные версии оператора сдвига operator<<(type) для всех стандартних типов, то правый оператор всегда будет вызван. Функция cout << i вызывает operator<<(int), a cout<<name вызывает operator<< (const char*). Следовательно, использование стандартных потоков является безопасным по типам данных. Другим преимуществом стандартных потоков является то, что определенные пользователем типы данных могут быть без труда в них встроены. Рассмотрим тип Pair, который мы хотим напечатать: struct Pair { int x; string у; } Все, что нам нужно сделать, это – перегрузить оператор operator << () для этого нового типа Pair, и мы сможем осуществлять вывод следующим образом: Pair p (25, "December"); cout << p; Соответствующий оператор operator << () может быть реализован так: ostream <char> & operator << (ostream <char> & о, const Pair& p) { return о << p.x << ' ' << p.y; } Библиотека потоков поддерживает единообразный интерфейс ввода-вывода, благодаря широкому использованию перегруженных функций и операторов. Это приводит к более простому и интуитивно понятному синтаксису. Вывод в поток выполняется с помощью оператора вставки (в поток), которым является перегруженный оператор сдвига влево <<. Левым его операндом является объект потока вывода. Правым его операндом может являться любая переменная, для которой определен вывод в поток (т.е. переменная любого встроенного типа или любого определенного пользователем типа, для которого она перегружена). Например, оператор: cout << ”Hello!” << ’\n’; приводит к выводу в предопределенный поток cout строки "Hello!". Оператор << возвращает ссылку на объект ostream, для которого он вызван. Это позволяет строить цепочки вызовов оператора вставки в поток, которые выполняются слева направо: int i = 5; double d = 2.08; cout << "i = " << i << ", \td = "<< d << ' \n '; Эта инструкция приведет к выводу на экран следующей строки: i = 5, d = 2.08 Целочисленные типы форматируются в соответствии с правилами, принятыми по умолчанию, для функции printf () (если они не изменены путем установки различных флагов форматирования). Например, следующие две инструкции дают одинаковый результат: int i = 1; float f = 2.0; cout << i << ” ” << f << ’\n’; printf ("%d %ld\n", i, f); cout << &i; // отображает адрес указателя в 16-ричной форме Тип void* используется для отображения адреса указателя.
Дата добавления: 2014-01-04; Просмотров: 734; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |