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

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

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

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

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

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

    1 ... 82 83 84 85 86 87 88 89 90 ... 337
    Перейти на страницу:
    z является локальной

    }

    int g(int x)   // переменная g является глобальной;

                   // переменная x является локальной в функции g

    {

      int f = x+2; // переменная f является локальной

      return 2*f;

    }

    Изобразим это графически.

    Здесь переменная x, объявленная в функции f(), отличается от переменной x, объявленной в функции g(). Они не создают недоразумений, потому что принадлежат разным областям видимости: переменная x, объявленная в функции f(), не видна извне функции f(), а переменная x, объявленная в функции g(), не видна извне функции g(). Два противоречащих друг другу объявления в одной и той же области видимости создают коллизию (clash). Аналогично, переменная f объявлена и используется в функции g() и (очевидно) не является функцией f().

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

    int max(int a, int b) // функция max является глобальной;

                          // а переменные a и b — локальными

    {

      return (a>=b) ? a : b;

    }

    int abs(int a)        // переменная a, не имеющая отношения

                          // к функции max()

    {

      return (a<0) ? –a : a;

    }

    Функции max() и abs() принадлежат стандартной библиотеке, поэтому их не нужно писать самому. Конструкция ?: называется арифметической инструкцией if (arithmetic if), или условным выражением (conditional expression). Значение инструкции (a>=b)?a:b равно a, если a>=b, и b — в противном случае. Условное выражение позволяет не писать длинный код наподобие следующего:

    int max(int a, int b) // функция max является глобальной;

                          // а переменные a и b — локальными

    {

      int m; // переменная m является локальной

      if (a>=b)

        m = a;

      else

       m = b;

      return m;

    }

     

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

    Рассмотрим более крупный технический пример, иллюстрирующий ситуацию, в которой имена выходят за пределы области видимости в конце инструкции и блоков (включая тела функций).

    // здесь переменные r, i и v не видны

    class My_vector {

     vector<int> v;           // переменная v принадлежит области

                              // видимости класса

    public:

     int largest()

     {

      int r = 0;              // переменная r является локальной

                              // (минимальное неотрицательное целое число)

      for (int i = 0; i<v.size(); ++i)

        r = max(r,abs(v[i])); // переменная i принадлежит

                              // области видимости цикла

                              // здесь переменная i не видна

      return r;

     }

                              // здесь переменная r не видна

    }

    // здесь переменная v не видна

    int x;           // глобальная переменная — избегайте по возможности

    int y;

    int f()

    {

      int x;         // локальная переменная, маскирующая глобальную

                     // переменную x

      x = 7;         // локальная переменная x

      {

        int x = y;   // локальная переменная x инициализируется

                     // глобальной переменной y, маскируя локальную

                     // переменную x, объявленную выше

      ++x;           // переменная x из предыдущей строки

      }

      ++x;           // переменная x из первой строки функции f()

      return x;

    }

    Если можете, избегайте ненужных вложений и сокрытий. Помните девиз: “Будь проще!”

    Чем больше область видимости имени, тем длиннее и информативнее должно быть ее имя: хуже имен x, y и z для глобальных переменных не придумаешь. Основная причина, по которой следует избегать глобальных переменных, заключается в том, что трудно понять, какие функции изменяют их значения. В больших программах практически невозможно понять, какие функции изменяют глобальную переменную. Представьте себе: вы пытаетесь отладить программу, и выясняется, что глобальная переменная принимает неожиданное значение. Какая инструкция присвоила ей это значение? Почему? В какой функции? Как это узнать?

    Функция, присвоившая неправильное значение данной переменной, может находиться в исходном файле, который вы никогда не видели! В хорошей программе может быть лишь несколько (скажем, одна или две) глобальных переменных. Например, калькулятор, описанный в главах 6 и 7, содержит две глобальные переменные: поток лексем ts и таблицу символов names.

    Обратите внимание на то, что большинство конструкций в языке С++ создают вложенные области видимости.

    • Функции в классах: функции-члены (раздел 9.4.2).

    class C {

    public:

     void f();

     void g()    // функция-член может быть определена в классе

     {

       // ...

     }

       // ...

       void C::f() // определение функции-члена за пределами класса

     {

       // ...

     }

    Это наиболее типичный и полезный вариант.

    • Классы в других классах: члены-классы (или вложенные классы).

    class C {

    public:

      struct M {

        // ...

      };

      // ...

    };

    Это допустимо только в сложных классах; помните, что в идеале класс должен быть маленьким и простым.

    • Классы в функциях: локальные классы.

    void f()

    {

      class L {

        // ...

      };

      // ...

    }

     

     Избегайте таких конструкций; если вам нужен локальный класс, значит, ваша функция слишком велика.

    • Функции в других функциях: локальные функции (или вложенные функции).

    void f()

    {

      void g() // незаконно

      {

        // ...

      }

      // ...

    }

    В языке С++ это не допускается;

    1 ... 82 83 84 85 86 87 88 89 90 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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