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

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

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

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

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

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

    1 ... 174 175 176 177 178 179 180 181 182 ... 337
    Перейти на страницу:
    n;

    }

    Иначе говоря, при каждом обращении к члену класса происходит неявное обращение к указателю this. Единственная ситуация, в которой его необходимо упомянуть явно, возникает, когда нужно сослаться на весь объект.

    Обратите внимание на то, что указатель this имеет специфический смысл: он ссылается на объект, для которого вызывается функция-член. Он не указывает на какой-то из ранее использованных объектов. Компилятор гарантирует, что мы не сможем изменить значение указателя this в функции-члене. Рассмотрим пример.

    struct S {

      // ...

     void mutate(S* p)

     {

       this = p; // ошибка: указатель this не допускает изменений

       // ...

      }

    };

    17.10.1. Еще раз об использовании списков

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

    Link* norse_gods = new Link("Thor");

    norse_gods = norse_gods–>insert(new Link("Odin"));

    norse_gods = norse_gods–>insert(new Link("Zeus"));

    norse_gods = norse_gods–>insert(new Link("Freia"));

    Link* greek_gods = new Link("Hera");

    greek_gods = greek_gods–>insert(new Link("Athena"));

    greek_gods = greek_gods–>insert(new Link("Mars"));

    greek_gods = greek_gods–>insert(new Link("Poseidon"));

    Это очень похоже на предыдущие фрагменты нашей программы. Как и раньше, исправим наши ошибки. Например, укажем правильное имя бога войны.

    Link* p = greek_gods–>find("Mars");

    if (p) p–>value = "Ares";

    Перенесем Зевса в список греческих богов.

    Link* p2 = norse_gods–>find("Zeus");

    if (p2) {

      if (p2==norse_gods) norse_gods = p2–>next();

      p2–>erase();

      greek_gods = greek_gods–>insert(p2);

    }

    И наконец, выведем список на печать.

    void print_all(Link* p)

    {

      cout << "{ ";

      while (p) {

        cout << p–>value;

        if (p=p–>next()) cout << ", ";

      }

      cout << " }";

    }

    print_all(norse_gods);

    cout<<"n";

    print_all(greek_gods);

    cout<<"n";

    В итоге получим следующий результат:

    { Freia, Odin, Thor }

    { Zeus, Poseidon, Ares, Athena, Hera }

    Какая из этих версий лучше: та, в которой функция insert() и другие являются функциями-членами, или та, в которой они не принадлежат классу? В данном случае это не имеет значения, но вспомните, что было написано в разделе 9.7.5.

    Следует отметить, что мы создали не класс списка, а только класс узла. В результате мы вынуждены следить за тем, какой указатель ссылается на первый элемент. Эти операции можно было бы сделать лучше, определив класс List, но структура класса, продемонстрированная выше, является общепринятой. Стандартный класс list рассматривается в разделе 20.4.

    Задание

    Это задание состоит из двух частей. Первые упражнения должны дать вам представление о динамических массивах и их отличии от класса vector.

    1. Разместите в свободной памяти массив, состоящий из десяти чисел типа int, используя оператор new.

    2. Выведите в поток cout значения десяти чисел типа int.

    3. Освободите память, занятую массивом (используя оператор delete[]).

    4. Напишите функцию print_array10(ostream& os, int* a), выводящую в поток os значения из массива a (содержащего десять элементов).

    5. Разместите в свободной памяти массив, состоящий из десяти чисел типа int; инициализируйте его значениями 100, 101, 102 и т.д.; выведите эти значения на печать.

    6. Разместите в свободной памяти массив, состоящий из одиннадцати чисел типа int; инициализируйте его значениями 100, 101, 102 и т.д.; выведите эти значения на печать.

    7. Напишите функцию print_array(ostream& os, int* a, int n), выводящую в поток os значения массива a (содержащего n элементов).

    8. Разместите в свободной памяти массив, состоящий из двадцати чисел типа int; инициализируйте его значениями 100, 101, 102 и т.д.; выведите эти значения на печать.

    9. Вы не забыли удалить массивы? (Если забыли, сделайте это сейчас.)

    10. Выполните задания 5, 6 и 8, используя класс vector, а не массив, и функцию print_vector() вместо функции print_array().

    Вторая часть задания посвящена указателям и их связи с массивами. Используйте функцию print_array() из последнего задания.

    1. Разместите в свободной памяти переменную типа int, инициализируйте ее число 7 и присвойте ее адрес указателю p1.

    2. Выведите на печать значения указателя p1 и переменной типа int, на которую он ссылается.

    3. Разместите в свободной памяти массив, состоящий из семи чисел типа int; инициализируйте его числами 1, 2, 4, 8 и т.д.; присвойте адрес массива указателю p2.

    4. Выведите на печать значение указателя p2 и массив, на который он ссылается.

    5. Объявите указатель типа int* с именем p3 и инициализируйте его значением указателя p2.

    6. Присвойте указатель p1 указателю p2.

    7. Присвойте указатель p3 указателю p2.

    8. Выведите на печать значения указателей p1 и p2, а также то, на что они ссылаются.

    9. Освободите всю память, которую использовали.

    10. Разместите в свободной памяти массив, состоящий из десяти чисел типа int; инициализируйте их числами 1, 2, 4, 8 и т.д.; присвойте его адрес указателю p1.

    11. Разместите в свободной памяти массив, состоящий из десяти чисел типа int, присвойте его адрес указателю p2.

    12. Скопируйте значения из массива, на который ссылается указатель p1, в массив, на который ссылается указатель p2.

    13. Повторите задания 10–12, используя класс vector, а не массив.

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

    1. Зачем нужны структуры данных с переменным количеством элементов?

    2. Назовите четыре вида памяти, используемой в обычных программах.

    3. Что такое свободная память? Как еще ее называют? Какие операторы работают со свободной памятью?

    4. Что такое оператор разыменования и зачем он нужен?

    5. Что такое адрес? Как язык С++ манипулирует с адресами?

    6. Какую информацию об объекте несет указатель, который на него ссылается? Какую полезную информацию он теряет?

    7. На что может ссылаться указатель?

    8. Что такое утечка памяти?

    9. Что такое ресурс?

    10. Как инициализировать указатель?

    11. Что такое нулевой указатель? Зачем он нужен?

    12. Когда нужен указатель (а не ссылка или именованный объект)?

    13. Что такое деструктор? Когда он нужен?

    14. Зачем нужен виртуальный деструктор?

    15. Как вызываются деструкторы членов класса?

    16. Что такое приведение типов? Когда оно необходимо?

    17. Как получить доступ к

    1 ... 174 175 176 177 178 179 180 181 182 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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