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 ... 121 122 123 124 125 126 127 128 129 ... 337
    Перейти на страницу:
    заданного текста, игнорируя знаки пунктуации и регистры,

     // а также удаляя дубликаты из полученного результата

    {

      Punct_stream ps(cin);

      ps.whitespace(";:,.?!()"{}<>/&$@#%^*|~"); // " в строке

                                                 // означает "

      ps.case_sensitive(false);

      cout << "Пожалуйста, введите слова n";

      vector<string> vs;

      string word;

      while (ps>>word) vs.push_back(word); // ввод слов

      sort(vs.begin(),vs.end());           // сортировка в лексикографическом

                                           // порядке

      for (int i=0; i<vs.size(); ++i)      // запись в словарь

        if (i==0 || vs[i]!=vs[i–1]) cout << vs[i] << endl;

    }

    Этот код создает упорядоченный список введенных слов. Инструкция

    if (i==0 || vs[i]!=vs[i–1])

    удаляет дубликаты. Если в программу ввести слова

    There are only two kinds of languages: languages that people complain

    about, and languages that people don’t use.

    то результат ее работы будет выглядеть следующим образом:

    about

    and

    are

    complain

    don’t

    kind

    languages

    of

    only

    people

    that

    there

    two

    use

    Почему мы получили на выходе don’t, а не dont? Потому что оставили апостроф за пределами списка разделителей whitespace().

     

     Внимание: класс Punct_stream во многом похож на класс istream, но на самом деле отличается от него. Например, мы не можем проверить его состояние с помощью функции rdstate(), функция eof() не определена, и нет оператора >>, который вводит целые числа. Важно отметить, что мы не можем передать объект класса Punct_stream в качестве аргумента функции, ожидающей поток istream. Можно ли определить класс Punct_istream, который в точности повторял бы поведение класса istream? Можно, но у вас пока нет достаточного опыта программирования, вы еще не освоили основы проектирования и не знаете всех возможностей языка (если впоследствии вы вернетесь к этой задаче, то сможете реализовать буферы потоков на уровне профессионала).

     

     Легко ли читать определение класса Punct_stream? Понятны ли вам объяснения? Могли бы вы самостоятельно написать такую программу? Еще несколько дней назад вы были новичком и честно закричали бы: “Нет, нет! Никогда!” или “Нет, нет! Вы что, с ума сошли? Очевидно, что ответ на поставленный вопрос отрицательный”. Цель нашего примера заключается в следующем: 

    • показать реальную задачу и способ ее решения;

    • доказать, что это решение можно найти с помощью вполне доступных средств;

    • описать простое решение простой задачи;

    • продемонстрировать разницу между интерфейсом и реализацией. 

     

     Для того чтобы стать программистом, вы должны читать программы, причем не только учебные. Приведенный пример относится как раз к таким задачам. Через несколько дней или недель вы разберетесь в нем без труда и сможете улучшить это решение.

    Этот пример можно сравнить с уроком, на котором учитель английского языка для иностранцев произносит выражения на сленге, чтобы показать его колорит и живость. 

    11.8. И еще много чего

     

     Подробности ввода-вывода можно описывать бесконечно. Этот процесс ограничен лишь терпением слушателей. Например, мы не рассмотрели сложности, связанные с естественными языками. То, что в английском языке записывается как 12.35, в большинстве европейских языков означает 12,35. Естественно, стандартная библиотека С++ предоставляет возможности для устранения этих и многих других проблем. А как записать китайские иероглифы? Как сравнивать строки, записанные символами малайского языка? Ответы на эти вопросы существуют, но они выходят далеко за рамки нашей книги. Если вам потребуется более детальная информация, можете обратиться к более специализированным книгам (например, Langer, Standard C++ IOStreams and Locales и Stroustrup, The C++ Programming Language), а также к библиотечной и системной документации. Ищите ключевое слово locale (местная специфика); этот термин обычно применяется к функциональным возможностям для обработки различий между естественными языками.

    Другим источником сложностей является буферизация; стандартные библиотечные потоки iostream основаны на концепции под названием streambuf. Для сложных задач, связанных с потоками iostream, при решении которых важна производительность или функциональность, без объектов класса streambuf обойтись нельзя. Если хотите определить свой собственный класс iostream или настроить объекты класса iostream на новые источники данных, см. главу 21 книги The C++ Programming Language Страуструпа или системную документацию.

    При программировании на языке С++ вы можете обнаружить семейство стандартных функций ввода-вывода printf()/scanf(), определенных в языке С. В этом случае прочитайте разделы 27.6, B.10.2, или прекрасный учебник Кернигана и Ритчи Язык программирования С (Kernighan and Ritchie, The C Programming Language), или же любой из многочисленных источников информации в веб. Каждый язык имеет свои собственные средства ввода-вывода; все они изменяются, иногда неправильно, но в большинстве случаев правильно (совершенно по-разному) отражая основные понятия, изложенные в главах 10 и 11.

    Стандартная библиотека ввода-вывода описана в приложении Б, а связанные с ней графические пользовательские интерфейсы — в главах 12–16.

    Задание

    1. Напишите программу с именем Test_output.cpp. Объявите целочисленную переменную birth_year и присвойте ей год своего рождения.

    2. Выведите переменную birth_year в десятичном, шестнадцатеричном и восьмеричном виде.

    3. Выведите основание системы счисления для каждого числа.

    4. Выровняли ли вы результаты по столбцам с помощью символа табуляции? Если нет, то сделайте это.

    5. Теперь выведите год вашего рождения.

    6. Были ли какие-то проблемы? Что произошло? Замените ваш вывод на десятичный.

    7. Вернитесь к упр. 2 и выведите основание системы счисления для каждого числа.

    8. Попытайтесь прочитать данные как восьмеричные, шестнадцатеричные и т.д.

    cin >> a >>oct >> b >> hex >> c >> d;

    cout << a << 't'<< b << 't'<< c << 't'<< d << 'n' ;

    Запустите программу со следующими входными данными:

    1234 1234 1234 1234

    Объясните результаты.

    9. Напишите программу, три раза выводящую на печать число 1234567.89: сначала в формате general, затем — в fixed и в scientific. Какой способ представления обеспечивает наибольшую точность? Почему?

    10. Создайте простую таблицу, содержащую фамилию, имя, телефонный номер и адрес электронной почты хотя бы пяти ваших друзей. Поэкспериментируйте с разной шириной полей, пока не найдете приемлемый.

    Контрольные вопросы

    1. Почему ввод-вывод является сложной задачей для программиста?

    2. Что означает выражение << hex?

    3. Какие шестнадцатеричные числа используются в компьютерных

    1 ... 121 122 123 124 125 126 127 128 129 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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