straustrup2 (852740), страница 35

Файл №852740 straustrup2 (Бьерн Страуструп. Язык программирования С++) 35 страницаstraustrup2 (852740) страница 352021-10-05СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 35)

Например:#define MIN(a,b) (((a)<(b))?(a):(b))Если макроопределение достаточно сложное, и требуется комментарий к нему, то разумнее написатькомментарий вида /* */, поскольку в реализации С++ может использоваться препроцессор С, которыйне распознает комментарии вида //. Например:#define m2(a) something(a)/* глубокомысленный комментарий */С помощью макросредств можно создать свой собственный язык, правда, скорее всего, он будетнепонятен другим.

Кроме того, препроцессор С предоставляет довольно слабые макросредства. Есливаша задача нетривиальна, вы, скорее всего, обнаружите, что решить ее с помощью этих средств либоневозможно, либо чрезвычайно трудно. В качестве альтернативы традиционному использованиюмакросредств в язык введены конструкции const, inline и шаблоны типов. Например:const int answer = 42;template<class T>inline T min(T a, T b) { return (a<b)?a:b; }119Бьерн Страуструп.Язык программирования С++4.8 Упражнения1.(*1) Составьте следующие описания: функция с параметрами типа указатель на символ и ссылка нацелое, невозвращающая значения; указатель на такую функцию; функция с параметром, имеющимтип такого указателя; функция, возвращающая такой указатель.

Напишите определение функции, укоторой параметр и возвращаемое значение имеют тип такого указателя. Подсказка: используйтеtypedef.2.(*1) Как понимать следующее описание? Где оно может пригодиться?typedef int (rifii&) (int, int);3.(*1.5) Напишите программу, подобную той, что выдает "Hello, world". Она получает имя (name) какпараметр командной строки и выдает "Hello, name". Измените программу так, чтобы она получалапроизвольное число имен и всем им выдавала свое приветствие: "Hello, ...".4.(1.5) Напишите программу, которая, беря из командной строки произвольное число имен файлов,все эти файлы переписывает один за другим в cout.

Поскольку в программе происходитконкатенация файлов, вы можете назвать ее cat от слова concatenation - конкатенация).5.(*2) Переведите небольшую программу с языка С на С++. Измените заголовочные файлы так, чтобыони содержали описание всех вызываемых функций и описание типов всех параметров. Повозможности все команды #define замените конструкциями enum, const или inline. Удалите изфайлов .c все описания внешних, а определения функций приведите к виду, соответствующемуС++.

Вызовы malloc() и free() замените операциями new и delete. Удалите ненужные операцииприведения.6.(*2) Напишите функцию sort() ($$4.6.9), использующую более эффективный алгоритм сортировки.7.(*2) Посмотрите на определение структуры tnode в $$R.9.3. Напишите функцию, заносящую новыеслова в дерево узлов tnode. Напишите функцию для вывода узлов дерева tnode. Напишитефункцию, которая производит такой вывод в алфавитном порядке. Измените структуру tnode так,чтобы в ней содержался только указатель на слово произвольной длины, которое размещается спомощью new в свободной памяти. Измените функцию так, чтобы она работала с новой структуройtnode.8.(*1) Напишите функцию itoa(), которая использовалась в примере из $$4.6.8.9.(*2) Узнайте, какие стандартные заголовочные файлы есть в вашей системе.

Поройтесь в каталогах/usr/include или /usr/include/CC (или в тех каталогах, где хранятся стандартные заголовочные файлывашей системы). Прочитайте любой показавшийся интересным файл.10. (*2) Напишите функцию, которая будет переворачивать двумерный массив. (Первый элементмассива станет последним).11. (*2) Напишите шифрующую программу, которая читает символы из cin и пишет их в cout взашифрованном виде.

Можно использовать следующий простой метод шифрации: для символа sзашифрованное представление получается в результате операции s^key[i], где key - массивсимволов, передаваемый в командной строке. Символы из массива key используются вциклическом порядке, пока не будет прочитан весь входной поток. Первоначальный текстполучается повторным применением той же операции с теми же элементами key.

Если массив keyне задан (или задана пустая строка), шифрация не происходит.12. (*3) Напишите программу, которая помогает дешифрировать текст, зашифрованный описаннымвыше способом, когда ключ (т.е. массив key) неизвестен. Подсказка: см. D Kahn "The Codebreakers",Macmillan, 1967, New York, стр. 207-213.13. (*3) Напишите функцию обработки ошибок, первый параметр который подобен форматирующейстроке-параметру printf() и содержит форматы %s, %c и %d. За ним может следовать произвольноеколичество числовых параметров. Функцию printf() не используйте.

Если смысл формата %s идругих форматов вам неизвестен, обратитесь к $$10.6. Используйте <stdarg.h>.14. (*1) Какое имя вы выбрали бы для типов указателей на функции, которые определяются с помощьюtypedef?120Бьерн Страуструп.Язык программирования С++15. (*2) Исследуйте разные программы, чтобы получить представление о разных используемых напрактике стилях именования. Как используются заглавные буквы? Как используется подчерк? Вкаких случаях используются такие имена, как i или x?16.

(*1) Какие ошибки содержатся в следующих макроопределениях?#define PI = 3.141593;#define MAX(a,b) a>b?a:b#define fac(a) (a)*fac((a)-1)17. (*3) Напишите макропроцессор с простыми возможностями, как у препроцессора С. Текст читайте изcin, а результат записывайте в cout. Вначале реализуйте макроопределения без параметров.Подсказка: в программе калькулятора есть таблица имен и синтаксический анализатор, которымиможно воспользоваться.18. (*2) Напишите программу, извлекающую квадратный корень из двух (2) с помощью стандартнойфункции sqrt(), но не включайте в программу <math.h>. Сделайте это упражнение с помощьюфункции sqrt() на Фортране.19.

(*2) Реализуйте функцию print() из $$4.6.7.121Бьерн Страуструп.Язык программирования С++5. КЛАССЫ"Эти типы не абстрактные, они столь же реальны, как int и float"- Даг МакилройВ этой главе описываются возможности определения новых типов, для которых доступ к даннымограничен заданным множеством функций, осуществляющих его.

Объясняется, как можно использоватьчлены структуры данных, как ее защищать, инициализировать и, наконец, уничтожать. В примерахприведены простые классы для управления таблицей имен, работы со стеком, множеством и реализациидискриминирующего (т.е. надежного) объединения. Следующие три главы завершают описаниевозможностей С++ для построения новых типов, и в них содержится больше интересных примеров.5.1 Введение и краткий обзорПонятие класса, которому посвящена эта и три следующих главы, служит в С++ для того, чтобы датьпрограммисту инструмент построения новых типов. Ими пользоваться не менее удобно, чемвстроенными. В идеале использование определенного пользователем типа не должно отличаться отиспользования встроенных типов. Различия возможны только в способе построения.Тип есть вполне конкретное представление некоторого понятия.

Например, в С++ тип float с операциями+, -, * и т.д. является хотя и ограниченным, но конкретным представлением математического понятиявещественного числа. Новый тип создается для того, чтобы стать специальным и конкретнымпредставлением понятия, которое не находит прямого и естественного отражения среди встроенныхтипов.

Например, в программе из области телефонной связи можно ввести тип trunk_module (линиясвязи), в видеоигре - тип explosion (взрыв), а в программе, обрабатывающей текст, - типlist_of_paragraphs (список-параграфов). Обычно проще понимать и изменять программу, в которой типыхорошо представляют используемые в задаче понятия. Удачно подобранное множествопользовательских типов делает программу более ясной. Оно позволяет транслятору обнаруживатьнедопустимое использование объектов, которое в противном случае останется невыявленным доотладки программы.Главное в определении нового типа - это отделить несущественные детали реализации (например,расположение данных в объекте нового типа) от тех его характеристик, которые существенны дляправильного его использования (например, полный список функций, имеющих доступ к данным).

Такоеразделение обеспечивается тем, что вся работа со структурой данных и внутрение, служебныеоперации над нею доступны только через специальный интерфейс (через "одно горло").Глава состоит из четырех частей:$$5.2 Классы и члены. Здесь вводится основное понятие пользовательского типа, называемого классом.Доступ к объектам класса может ограничиваться множеством функций, описания которыхвходят в описание класса. Эти функции называются функциями-членами и друзьями. Длясоздания объектов класса используются специальные функции-члены, называемыеконструкторами. Можно описать специальную функцию-член для удаления объектов класса приего уничтожении.

Такая функция называется деструктором.$$5.3 Интерфейсы и реализации. Здесь приводятся два примера разработки, реализации ииспользования классов.$$5.4 Дополнительные свойства классов. Здесь приводится много дополнительных подробностей оклассах. Показано, как функции, не являющейся членом класса, предоставить доступ к егочастной части.

Характеристики

Тип файла
PDF-файл
Размер
2,87 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6502
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее