LoveRead.info » Книги » Разная литература » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Книгу Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

290 0 18:03, 26-08-2023
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
26 август 2023

Книга Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читать онлайн бесплатно без регистрации

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

    1 ... 108 109 110 111 112 113 114 115 116 ... 337
    Перейти на страницу:
    1 до 10:n";

    int n = 0;

    while (true) {

      if (cin>>n) { // мы ввели целое число; теперь проверим его

        if (1<=n && n<=10) break;

        cout << "Извините, " << n

        << " выходит за пределы интервала [1:10]; попробуйте еще раз.n";

      }

      else {

        cout << "Извините, это не число; попробуйте еще раз.n";

        skip_to_int();

      }

    }

    // если мы добрались до этой точки, значит, число n лежит

    // в диапазоне [1:10]

    Этот код лучше, но остается слишком длинным и запутанным для того, чтобы много раз применять его в программе. Мы никогда не добьемся желаемого результата, разве что после (слишком) долгой проверки. Какие операции мы бы хотели иметь на самом деле? Один из разумных ответов звучит так: “Нам нужны две функции: одна должна считывать любое число типа int, а другая — целое число из заданного диапазона”.

    int get_int(); // считывает число типа int из потока cin

    int get_int(int low, int high); // считывает из потока cin число int,

                   // находящееся в диапазоне [low:high]

    Если бы у нас были эти функции, то мы могли бы, по крайней мере, использовать их просто и правильно. Их несложно написать.

    int get_int()

    {

      int n = 0;

      while (true) {

        if (cin >> n) return n;

        cout << "Извините, это не число; попробуйте еще раз n";

        skip_to_int();

      }

    В принципе функция get_int() упорно считывает данные, пока не найдет цифры, которые можно интерпретировать как целое число. Если требуется прекратить работу функции get_int(), то следует ввести целое число или признак конца файла (во втором случае функция get_int() сгенерирует исключение).

    Используя такую общую функцию get_int(), можем написать проверку выхода за пределы диапазона get_int():

    int get_int(int low, int high)

    {

      cout << "Пожалуйста, введите целое число из от "

      << low << " до " << high << " ( включительно ):n";

      while (true) {

        int n = get_int();

        if (low<=n && n<=high) return n;

        cout << "Извините, " << n

        << " выходит за пределы интервала ["<< low << ':' << high

        << "]; попробуйте еще n";

      }

    }

    Этот вариант функции get_int() работает так же упорно, как и остальные. Она продолжает ввод целых чисел, выходящих за пределы диапазона, пока не найдет число, лежащее в указанных пределах.

    Теперь можем написать код для ввода целых чисел.

    int n = get_int(1,10);

    cout << "n: " << n << endl;

    int m = get_int(2,300);

    cout << "m: " << m << endl;

    Не забудьте предусмотреть перехват исключения, если не хотите получить сообщения об ошибках в (возможно, редкой) ситуации, когда функция get_int() на самом деле не может ввести ни одного числа. 

    10.7.2. Отделение диалога от функции

    Разные варианты функции get_int() по-прежнему смешивают ввод данных с выводом сообщений, адресованных пользователю. Для простых программ это вполне допустимо, но в большой программе мы можем пожелать, чтобы сообщения были разными. Для этого понадобится функция get_int(), похожая на следующую:

    int strength = get_int(1,10,"Введите силу",

                   "Вне диапазона, попробуйте еще");

    cout << " сила: " << strength << endl;

    int altitude = get_int(0,50000,

                   "Пожалуйста, введите высоту в футах",

                   "Вне диапазона, пожалуйста, попробуйте еще");

    cout << "высота: " << altitude << " футов над уровнем моря n";

    Эту задачу можно решить так:

    int get_int(int low, int high, const string& greeting,

                const string& sorry)

    {

      cout << greeting << ": [" << low << ':' << high << "]n";

      while (true) {

        int n = get_int();

        if (low<=n && n<=high) return n;

        cout << sorry << ": [" << low << ':' << high << "]n";

      }

    }

    Довольно трудно составить произвольные сообщения из заготовок, поэтому необходимо выработать стиль сообщений. Часто это оказывается полезным и позволяет составлять действительно гибкие сообщения, необходимые для поддержки многих естественных языков (например, арабского, бенгальского, китайского, датского, английского и французского). Однако эта задача не для новичков.

    Обратите внимание на то, что наше решение осталось незавершенным: функция get_int() без указания диапазона осталась “болтушкой”. Более тонкий аспект этой проблемы заключается в том, что вспомогательные функции, используемые в разных частях программы, не должны содержать “вшитых” сообщений. Далее, библиотечные функции, которые по своей сути предназначены для использования во многих программах, вообще не должны выдавать никаких сообщений для пользователя, — помимо всего прочего, автор библиотеки может даже не предполагать, что программа, в которой используется его библиотека, будет выполняться на машине под чьим-то наблюдением. Это одна из причин, по которым наша функция error() не выводит никаких сообщений об ошибках (см. раздел 5.6.3); в общем, мы не можем знать, куда их писать.

    10.8. Операторы вывода, определенные пользователем

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

    Рассмотрим простой оператор вывода для типа Date из раздела 9.8, который просто печатает год, месяц и день, разделенные запятыми.

    ostream& operator<<(ostream& os, const Date& d)

    {

      return

    1 ... 108 109 110 111 112 113 114 115 116 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки