My-library.info
Все категории

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

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп. Жанр: Программирование год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

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

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

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

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

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

Программирование. Принципы и практика использования C++ Исправленное издание - читать книгу онлайн бесплатно, автор Бьёрн Страуструп
сохранения заголовочных файлов (.h) на вашем компьютере.

• Если вы получили сообщение редактора связей, упоминающее о неразрешенных внешних ссылках, то проблема таится в свойствах проекта.

Если наши советы вам не помогли, зовите друга. 

Приложение Д

Реализация графического пользовательского интерфейса

“Когда вы наконец поймете, что делаете,

то все пойдет правильно”

Билл Фэйрбэнк (Bill Fairbank)

В этом приложении представлена реализация обратных вызовов, а также классов Window, Widget и Vector_ref. В главе 16 мы не требовали от читателей знать об указателях и операторах приведения типа, поэтому вынесли подробные объяснения в приложение.

Д.1. Реализация обратных вызовов

Обратные вызовы реализованы следующим образом:

void Simple_window::cb_next(Address, Address addr)

// вызов функции Simple_window::next() для окна,

// расположенного по адресу addr

{

  reference_to<Simple_window>(addr).next();

}

Поскольку вы уже прочитали главу 17, то вам должно быть очевидно, что аргумент Address должен иметь тип void*. И, разумеется, функция reference_to<Simple_window>(addr) должна каким-то образом создавать ссылку на объект класса Simple_window из указателя addr, имеющего тип void*. Однако, если у вас нет опыта программирования, то ничто для вас не “очевидно” и не “разумеется”, пока вы не прочтете главу 17, поэтому рассмотрим и использование адресов подробнее.

Как описано в разделе A.17, язык C++ предлагает способ для указания имени типа. Рассмотрим пример.

typedef void* Address; // Address — это синоним типа void*

Это значит, что мы можем использовать имя Address вместо void*. В данном случае, используя имя Address, мы хотим подчеркнуть, что передаем адрес, и скрыть тот факт, что void* — это имя типа указателя на объект, тип которого неизвестен.

Итак, функция cb_next() получает указатель типа void* с именем addr в качестве аргумента и — каким-то образом — немедленно преобразовывает его в ссылку Simple_window&:

reference_to<Simple_window>(addr)

Функция reference_to является шаблонной (раздел A.13).

template<class W>W& reference_to(Address pw)

// интерпретирует адрес как ссылку на объект класса W

{

  return *static_cast<W*>(pw);

}

Здесь мы использовали шаблонную функцию, для того чтобы самостоятельно написать операции, действующие как приведение типа void* к типу Simple_window&. Это приведение типа static_cast описано в разделе 17.8.

Компилятор не имеет возможности проверить наши предположения о том, что аргумент addr ссылается на объект класса Simple_window, но правила языка требуют, чтобы компилятор в этом вопросе доверял программисту. К счастью, мы оказались правы. Об этом свидетельствует от факт, что система FLTK возвращает нам обратно указатель, который мы ей передавали. Поскольку, передавая указатель системе FLTK, мы знали его тип, можно использовать функцию reference_to, чтобы “получить его обратно”. Все это немного запутанно, не проходит проверку и не больше характерно для низкоуровневого программирования.

Получив ссылку на объект класса Simple_window, мы можем использовать ее для вызова функции-члена класса Simple_window. Рассмотрим пример (раздел 16.3).

void Simple_window::cb_next(Address, Address pw)

// вызов функции Simple_window::next() для окна,

// расположенного по адресу pw

{

  reference_to<Simple_window>(pw).next();

}

Мы использовали довольно сложную функцию обратного вызова cb_next(), просто чтобы согласовать типы, необходимые для вызова совершенно обычной функции-члена next().

Д.2. Реализация класса Widget

Наш интерфейсный класс Widget выглядит следующим образом.

class Widget {

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

// а не сам класс Fl_widget;

// мы пытаемся не смешивать наши интерфейсные классы с FLTK

public:

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

  :loc(xy), width(w), height(h), label(s), do_it(cb)

  { }

  virtual ~Widget() { } // деструктор

  virtual void move(int dx,int dy)

  { hide(); pw–>position(loc.x+=dx, loc.y+=dy); show(); }

  virtual void hide() { pw–>hide(); }

  virtual void show() { pw–>show(); }

  virtual void attach(Window&) = 0; // каждый объект класса

                                    // Widget определяет хотя бы

                                    // одно действие над окном

  Point loc;

  int width;

  int height;

  string label;

  Callback do_it;

protected:

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

                 // принадлежит объекту классу Window

  Fl_Widget* pw; // каждый объект класса Widget о "своем"

                 // классе Fl_Widget

};

Обратите внимание на то, что наш класс Widget следит за “своим” компонентом библиотеки FLTK и классом Window, с которыми он связан. Кроме того, отметьте, что для этого нам необходимы указатели, поскольку объект класса Widget на протяжении времени своего существования может быть связан с разными объектами класса Window. Ссылки или именованного объекта для этого недостаточно. (Объясните почему?)

Объект класса Widget имеет местоположение (loc), прямоугольную форму (width и height), а также сметку (label. Интересно, что он также имеет функцию обратного вызова (do_it), т.е. связывает образ объекта класса Widget на экране с фрагментом своего кода. Смысл операций move(), show(), hide() и attach() должен быть очевидным.

Класс Widget выглядит незаконченным. Он спроектирован как класс реализации, который пользователи не должны видеть слишком часто. Его стоит переделать. Мы подозреваем, что все эти открытые члены и “очевидные” операции содержат подводные камни.

Класс Widget имеет виртуальную функцию и может быть использован как базовый класс, поэтому в нем предусмотрен виртуальный деструктор (см. раздел 17.5.2).

Д.3. Реализация класса Window

Когда следует использовать указатели, а когда ссылки? Мы обсудили этот общий вопрос в разделе 8.5.6. Здесь мы лишь отметим, что некоторые программисты любят указатели и что нам нужны указатели, когда мы хотим сослаться на разные объекты в разные моменты времени.

До сих пор мы скрывали главный класс в нашей графической библиотеке — класс Window. Основная причина этого заключалась в том, что он использует указатели, а его реализация с помощью библиотеки FLTK опирается на использование свободной памяти. Вот как описан этот класса в заголовочном файле Window.h.

class Window : public Fl_Window {

public:

  // позволяет


Бьёрн Страуструп читать все книги автора по порядку

Бьёрн Страуструп - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


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

Отзывы читателей о книге Программирование. Принципы и практика использования C++ Исправленное издание, автор: Бьёрн Страуструп. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.