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 ... 157 158 159 160 161 162 163 164 165 ... 337
    Перейти на страницу:
    правильно возобновить работу, когда произойдет ожидаемое событие. Например, при работе под управлением системы Microsoft Windows программа должна перерисовать окно, которое было перемещено или ранее перекрыто другим окном. Кроме того, объект класса Window должен самостоятельно реагировать на изменение размеров окна. Функция Fl::wait() выполняет все эти задания так, как это предусмотрено по умолчанию. Каждый раз, когда функция wait() обрабатывает какое-то событие, она возвращает управление, чтобы наша программа могла выполнить какие-то действия.

    Итак, когда кто-то щелкает на кнопке Next, функция wait() вызывает функцию cb_next() и возвращает управление (нашему циклу ожидания). Для того чтобы сделать это в функции wait_for_button(), функция next() должна просто присвоить булевой переменной button_pushed значение true. Это просто.

    void Simple_window::next()

    {

      button_pushed = true;

    }

    Разумеется, мы также должны где-то определить переменную button_pushed.

    bool button_pushed; // Инициализируется в конструкторе

                        // значением false

    После определенного периода ожидания функция wait_for_button() должна восстановить прежнее значение переменной button_pushed и вызвать функцию redraw(), чтобы все внесенные изменения были видны на экране. Именно это мы и сделали. 

    16.4. Класс Button и другие разновидности класса Widget

    Определим класс, описывающий кнопку.

    struct Button:Widget {

      Button(Point xy, int w, int h, const string& label, Callback cb);

      void attach(Window&);

    };

     

     Класс Button является производным от класса Widget с координатами xy, размерами w и h, текстовой меткой label и обратным вызовом cb. В принципе все, что появляется на экране в результате какого-то действия (например, обратный вызов), является объектом класса Widget. 

    16.4.1. Класс Widget

    Виджет (widget) — это технический термин. У него есть более информативный, но менее эффектный синоним — элемент управления окном (control). Такой элемент используется для определения форм взаимодействия с программой через графический пользовательский интерфейс. Определение класса Widget приведено ниже.

    class Widget {

     // Класс Widget — это дескриптор класса Fl_widget,

     // он не является классом Fl_widget;

     // мы стараемся, чтобы наши интерфейсные классы отличались

     // от FLTK

    public:

      Widget(Point xy, int w, int h, const string& s, Callback cb);

      virtual void move(int dx,int dy);

      virtual void hide();

      virtual void show();

      virtual void attach(Window&) = 0;

      Point loc;

      int width;

      int height;

      string label;

      Callback do_it;

    protected:

      Window* own;   // каждый объект класса Widget принадлежит Window

      Fl_Widget* pw; // связь с классом Widget из библиотеки FLTK

    }; 

    Класс Widget имеет две интересные функции, которые можно применить в классе Button (а также в любом другом классе, производном от класса Widget, например Menu; см. раздел 16.7).

    • Функция hide() делает объект класса Widget невидимым.

    • Функция show() делает объект класса Widget снова видимым.

    Изначально объект класса Widget является видимым.

    Как и в классе Shape, мы можем с помощью функции move() перемещать объект класса Widget в окне и должны связать этот объект с окном, вызвав функцию attach() перед тем, как использовать. Обратите внимание на то, что мы объявили функцию attach() чисто виртуальной (см. раздел 16.3.5): каждый класс, производный от класса Widget, должен самостоятельно определить, что означает его связывание с объектом класса Window. Фактически системные элементы управления окном создаются в функции attach(). Функция attach() вызывается из объекта класса Window как часть реализации его собственной функции attach(). В принципе связывание окна и элемента управления окном — это очень тонкое дело, в котором каждая из сторон выполняет свое задание. В результате окно знает о существовании своих элементов управления, а каждый элемент управления знает о своем окне.

    Обратите внимание на то, что объект класса Window не знает о том, какая разновидность класса Widget с ним взаимодействует. Как описано в разделах 16.4 и 16.5, объектно-ориентированное программирование позволяет объектам класса Window взаимодействовать с любыми разновидностями класса Widget. Аналогично, классу Widget не известно, с какой разновидностью класса Window он имеет дело.

    Мы проявили небольшую неаккуратность, оставив открытыми данные-члены. Члены own и pw предназначены исключительно для реализации производных классов, поэтому мы объявили из в разделе protected.

    Определения класса Widget и его конкретных разновидностей (Button, Menu и т.д.) содержатся в файле GUI.h.

    16.4.2. Класс Button

    Класс Button — это простейший класс Widget, с которым нам придется работать. Все, что он делает, — всего лишь обратный вызов после щелчка на кнопке.

    class Button:public Widget {

    public:

      Button(Point xy,int ww,int hh,const string& s,Callback cb)

            :Widget(xy,ww,hh,s,cb) { }

      void attach(Window& win);

    };

    Только и всего. Весь (относительно сложный) код библиотеки FLTK содержится в функции attach(). Мы отложили ее объяснение до приложения Д (пожалуйста, не читайте его, не усвоив главы 17 и 18). А пока заметим, что определение простого подкласса Widget не представляет особого труда.

     

     Мы не касаемся довольно сложного и запутанного вопроса, связанного с внешним видом кнопки (и других элементов управления окном) на экране. Проблема заключается в том, что выбор внешнего вида элементов управления окном практически бесконечен, причем некоторые стили диктуются конкретными операционными системами. Кроме того, с точки зрения технологии программирования в описании внешнего вида кнопок нет ничего нового. Если вы расстроились, то обратите внимание на то, что размещение фигуры поверх кнопки не влияет на ее функционирование, а как нарисовать фигуру, вам уже известно.

    16.4.3. Классы In_box и Out_box

    Для ввода и вывода текста в программе предусмотрены два класса, производных от класса Widget.

    struct In_box:Widget {

      In_box(Point xy,int w,int h,const string& s)

            :Widget(xy,w,h,s,0) { }

      int get_int();

      string get_string();

      void attach(Window& win);

    };

    struct Out_box:Widget {

      Out_box(Point xy, int w, int h, const

    1 ... 157 158 159 160 161 162 163 164 165 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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