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

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

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

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

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

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

    1 ... 312 313 314 315 316 317 318 319 320 ... 337
    Перейти на страницу:
    пользователем (перегруженного оператора), состоит из символа оператора, которому предшествует ключевое слово operator; например, имя функции, определяющей оператор +, выглядит как operator +.

    Matrix operator+(const Matrix&, const Matrix&);

    Примеры можно найти в определениях классов std::ostream (см. главы 10-11), std::vector (см. главы 17–19 и раздел Б.4), std::complex (см. раздел Б.9.3) и Matrix (см. главу 24).

    Перегрузить можно все операторы за исключением следующих:

    ?: . .* :: sizeof typeid

    Функции, определяющие следующие операторы, должны быть членами класса:

    = [ ] ( ) –>

    Все остальные операторы можно определить и как члены-функции, и как самостоятельные функции.

    Обратите внимание на то, что каждый пользовательский тип имеет оператор = (присваивание и инициализация), & (взятие адреса) и , (запятая), определенные по умолчанию.

    При перегрузке операторов следует проявлять умеренность и придерживаться общепринятых соглашений.

    A.11. Перечисления

    Перечисление (enumeration) определяет тип, содержащий набор именованных значения (перечислителей).

    enum Color { green, yellow, red };

    По умолчанию первый перечислитель равен нулю 0, так что green==0, а остальные значения увеличиваются на единицу, так что yellow==1 и red==2. Кроме того, можно явно определить значение перечислителя.

    enum Day { Monday=1,Tuesday,Wednesday };

    Итак, Monday==1, Tuesday==2 и Wednesday==3.

    Отметим, что перечислители принадлежат не области видимости своего перечисления, а охватывающей области видимости.

    int x = green;        // OK

    int y = Color::green; // ошибка

    Перечислители и значения перечислений неявно преобразовываются в целые числа, но целые числа не преобразовываются в типы перечислений неявно.

    int x = green;   // OK: неявное преобразование Color в int

    Color c = green; // OK

    c = 2;           // ошибка: нет неявного преобразования

                     // int в Color

    c = Color(2);    // OK: (непроверяемое) явное преобразование

    int y = c;       // OK: неявное преобразование Color в int

    Использование перечислений обсуждается в разделе 9.5.

    A.12. Классы

    Класс (class) — это тип, для которого пользователь определил представление его объектов и операции, допустимые для этих объектов.

    class X {

    public:

      // пользовательский интерфейс

    private:

      // реализация

    };

    Переменные, функции и типы, определенные в объявлении класса, называются членами этого класса. Технические детали изложены в главе 9.

    A.12.1. Доступ к членам класса

    Открытый член класса доступен для пользователей; закрытый член класса доступен только членам класса.

    class Date {

    public:

      // ...

      int next_day();

    private:

      int y, m, d;

    };

    void Date::next_day() { return d+1; } // OK

    void f(Date d)

    {

      int nd = d.d+1; // ошибка: Date::d — закрытый член класса

      // ...

    }

    Структура — это класс, члены которого по умолчанию являются открытыми.

    struct S {

      // члены (открытые, если явно не объявлены закрытыми)

    };

    Более подробная информация о доступе к членам класса, включая обсуждение защищенных членов, приведена в разделе 14.3.4.

    К членам объекта можно обращаться с помощью оператора . (точка), примененного к его имени, или оператора –> (стрелка), примененного к указателю на него.

    struct Date {

     int d, m, y;

     int day() const { return d; } // определенный в классе

     int month() const;            // просто объявленный; определен

                                   // в другом месте

     int year() const;             // просто объявленный; определен

                                   // в другом месте

    };

    Date x;

    x.d = 15;           // доступ через переменную

    int y = x.day();    // вызов через переменную

    Date* p = &x;

    p–>m = 7;           // доступ через указатель

    int z = p–>month(); // вызов через указатель

    На члены класса можно ссылаться с помощью оператора :: (разрешение области видимости).

    int Date::year() const { return y; } // определение за пределами

                                         // класса

    В функциях-членах класса можно ссылаться на другие члены класса, не указывая имя класса.

    struct Date {

      int d, m, y;

      int day() const { return d; }

      // ...

    };

    Такие имена относятся к объекту, из которого вызвана функция:

    void f(Date d1, Date d2)

    {

      d1.day(); // обращается к члену d1.d

      d2.day(); // обращается к члену d2.d

      // ...

    }

    A.12.1.1. Указатель this

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

    struct Date {

      int d, m, y;

      int month() const { return this–>m; }

      // ...

    };

    Функция-член, объявленная с помощью спецификатора const (константная функция-член), не может изменять значение члена объекта, из которого она вызвана.

    struct Date {

      int d, m, y;

      int month() const { ++m; } // ошибка: month() — константная

                                 // функция

     // ...

    };

    Более подробная информация о константных функциях-членах изложена в разделе 9.7.4.

    A.12.1.2. Друзья

    Функция, не являющаяся членом класса, может получить доступ ко всем членам класса, если ее объявить с помощью ключевого слова friend. Рассмотрим пример.

    // требует доступа к членам классов Matrix и Vector members:

    Vector operator*(const Matrix&, const Vector&);

    class Vector {

      friend

      Vector operator*(const Matrix&, const Vector&); // есть доступ

      // ...

    };

    class Matrix {

      friend

      Vector operator*(const Matrix&, const Vector&); // есть доступ

      // ...

    };

    Как показано выше, обычно это относится к функциям, которым нужен доступ к двум классам. Другое предназначение ключевого слова friend — обеспечивать функцию доступа, которую нельзя вызывать как функцию-член.

    class Iter {

    public:

      int distance_to(const iter& a) const;

      friend int difference(const Iter& a, const Iter& b);

      // ...

    };

    void f(Iter& p, Iter&

    1 ... 312 313 314 315 316 317 318 319 320 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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