Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

Приложение Б. Введение в С++ для программистов Java и С#

Данное приложение представляет собой краткое введение в язык С++, предназначенное для разработчиков, знакомых с Java или C#. Предполагается, что вы знакомы с такими концепциями объектно—ориентированного программирования, как наследование и полиморфизм, и хотите обучиться программированию на С++. Чтобы эта книга не стала громоздким 1500—страничным томом, включающим в себя полный учебник по С++ для начинающих, это приложение ограничивается изложением только существенных вопросов. В нем представлены основные понятия и методы, необходимые для понимания программ,

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

На момент написания книги язык С++ представляет собой единственное реальное средство написания межплатформенных, высокопроизводительных объектно—ориентированных приложений с графическим пользовательским интерфейсом. Недоброжелатели С++ обычно отмечают, что программировать на Java или C#, который отошел от поддержки совместимости с языком С, более приятно; на самом деле Бьерн Страуструп (Bjarne Stroustrup), создатель С++, отмечал в книге «The Design and Evolution of C++» (Дизайн и эволюция С++), что «внутри С++ существует очень компактный и более аккуратный язык, изо всех сил стремящийся получить известность».

К счастью, при программировании в рамках Qt мы обычно придерживаемся некоторого подмножества С++, которое сильно приближается к утопическому языку, о котором говорил Страуструп, что позволяет нам сконцентрировать свое внимание непосредственно на текущей проблеме. Более того, Qt в некоторых аспектах расширяет С++ благодаря своему новаторскому механизму «сигналов и слотов», поддержке кодировки Unicode и ключевому слову foreach.

В первом разделе данного приложения мы увидим, как можно объединять несколько файлов, содержащих исходный код С++, для получения исполняемой программы. Это приведет нас к изучению таких центральных концепций С++, как единица компиляции, заголовочные файлы, объектные файлы, библиотеки, и ознакомит с препроцессором, компилятором и компоновщиком С++.

Затем мы рассмотрим наиболее важные отличия языков С++, Java и C#, связанные с определением классов, использованием указателей и ссылок, перегрузками операторов, применением препроцессора и т.д. Несмотря на то что синтаксис С++ очень похож на синтаксис Java и C#, имеется тонкое отличие базовых концепций. В то же время язык С++, под влиянием которого coздaвaлиcь Java и C#, имеет много общего с этими двумя языками, в частности аналогичные типы данных, те же самые арифметические операторы и одинаковые основные операторы управления.

Последней раздел посвящен стандартной библиотеке С++, которая обеспечивает функциональность, готовую к применению в любой программе на С++. Эта библиотека развивалась в течение более 30 лет и поэтому вобрала в себя многие подходы, в том числе процедурный, объектно—ориентированный и функциональный стили программирования, а также макросы и шаблоны. По сравнению с библиoтeкaми Java и C# стандартная библиотека С++ имеет довольно ограниченную область применения; она не поддерживает программирование графического пользовательского интерфейса, многопоточную обработку, базы данных, интернационализацию, работу с сетями, XML и Unicode. Для применения С++ в этих областях предполагается, что разработчики С++ должны использовать различные библиотеки (часто зависимые от платформы).

Именно здесь приходит на помощь Qt. Сначала средства разработки Qt представляли собой межплатформенный

инструментарий по созданию графического пользовательского интерфейса (набор классов, позволяющий писать переносимые приложения с графическим пользовательским интерфейсом), но затем они быстро превратились в полномасштабную рабочую среду, частично расширяющую и частично заменяющую стандартную библиотеку С++. Хотя эта книга посвящена средствам разработки Qt, полезно знать возможности стандартной библиотеки С++, поскольку вам, возможно, придется работать с программным кодом, использующим эту библиотеку.

Первое знакомство с С++

Программа С++ состоит из одной или нескольких единиц компиляции. Каждая единица компиляции представляет собой отдельный файл исходного кода, обычно имеющий расширение .cpp (другими распространенными расширениями являются .cc и .cxx); она обрабатывается компилятором за один шаг. Для каждой единицы компиляции компилятор генерирует объектный файл с расширением .obj (в Windows) или (в Unix и Mac OS X). Объектный файл — это бинарный файл, содержащий машинный код для той архитектуры, на которой будет выполняться программа.

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

Рис. Б.1. Процесс компиляции программы на С++ (в Windows).

При создании программы только одна единица компиляции должна иметь функцию main, которая является точкой входа в программу. Эта функция не принадлежит никакому классу — она является глобальной функцией.

В отличие от Java, где каждый исходный файл должен содержать точно один класс, С++ позволяет организовать единицу компиляции удобным для нас способом. Можно реализовать несколько классов в одном файле .cpp или распространить реализацию класса на несколько файлов .cpp; имена исходных файлов могут быть любыми. При внесении изменений в один конкретный файл .cpp потребуется перекомпилировать этот файл и затем повторно скомпоновать приложение для создания нового исполняемого модуля.

Прежде чем мы пойдем дальше, давайте рассмотрим очень простую программу на С++, вычисляющую квадрат целого числа. Эта программа состоит из двух единиц компиляции: main.cpp и square.cpp.

Ниже показан файл square.cpp:

01 double square(double n)

02 {

03 return n * n;

04 }

Этот файл содержит лишь глобальную функцию с именем square, которая возвращает квадрат своего параметра.

Поделиться:
Популярные книги

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Эра Мангуста. Том 2

Третьяков Андрей
2. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра Мангуста. Том 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Один на миллион. Трилогия

Земляной Андрей Борисович
Один на миллион
Фантастика:
боевая фантастика
8.95
рейтинг книги
Один на миллион. Трилогия

Помещицы из будущего

Порохня Анна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Помещицы из будущего

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Император

Рави Ивар
7. Прометей
Фантастика:
фэнтези
7.11
рейтинг книги
Император

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри