Объектно-ориентированное программирование на C++

Объектно-ориентированное программирование на C++

Прежде чем приступать к изучению объектно-ориентированного программирования (ООП) вспомним ряд положений, без понимания которых невозможно понять парадигму ООП. Одной из основных посылок для понимания такого метода программирования является четкое представление о типах данных, которые Вы собираетесь использовать в своей программе.
А начнем мы разговор с вещей, которые большинство из Вас считает простыми и давно известными. Мы поговорим о базовых типах данных и о конструкторах новых типов, используемых в языке С. Для нас стало уже привычным в начале каждой программы, функции описывать переменные, c которыми мы собираемся оперировать. При этом Вы иногда обоснованно, иногда нет, присваиваете каждой переменной один из доступных в данном языке программирования типов. А почему нам доступны именно эти типы? Насколько адекватно они позволяют описывать моделируемый в программе мир? Можно ли использовать другие, более подходящие типы? На эти и множество других, еще не заданных вопросов, мы и попытаемся сегодня найти ответы.
Каждая используемая нами в программе переменная только тогда имеет смысл, когда может принимать какие-либо значения. Множество значений, которые может принимать переменная, играет столь важную роль для характеристики переменной, что оно называется типом переменной.

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

Bash - командный интерпретатор GNU Bourne
bash - это sh-совместимый интерпретатор командного языка, выполняющий команды, прочитанные со стандартного входного потока или из файла. Командный интерпретатор bash также включает полезные средства командных интерпретаторов Korn и C (ksh и csh).

Позиционные параметры


Позиционный параметр - это параметр, обозначаемый одной или несколькими цифрами, кроме цифры 0. Позиционным параметрам значения присваиваются на основе аргументов, переданных при вызове командного интерпретатора, и могут быть переприсвоены с помощью встроенной команды . Позиционным параметрам нельзя присваивать значения с помощью операторов присваивания. Позиционные параметры временно заменяются при выполнении функции командного интерпретатора

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

Пометки событий
При включении опции -o history с помощью встроенной команды , командный интерпретатор обеспечивает доступ к истории выполнения команд - списку ранее введенных команд. Текст последних HISTSIZE команд (по умолчанию - 500) сохраняется в списке истории. Командный интерпретатор сохраняет в списке истории команды до подстановки значений параметров и переменных (см. раздел "" ранее), но после подстановки команд из списка истории, с учетом значений переменных командного интерпретатора HISTIGNORE и HISTCONTROL.

Информация об ошибках
После того, как определено, что ошибка действительно существует, используйте команду bashbug для посылки сообщения об ошибке. Если вы знаете, как ошибку исправить, пришлите и исправление! Предложения и "философские" сообщения об ошибках можете отправлять по электронной почте по адресу или в дискуссионную группу Usenet gnu.bash.bug.

Программирование на C++ с использованием библиотеки Qt4
Библиотека Qt представляет собой набор классов C++ и инструментов разработки программ для Windows, Linux, MacOSX и встраиваемых систем (Embedded Linux). Исходные тексты библиотеки открыты, но лицензия GPL требует, чтобы программы, которые разрабатываются с использованием Qt, распространялись с открытым исходным кодом. Поэтому если вы не желаете открывать исходный код своей программы, то должны приобрести коммерческую версиюQt.

Порядок установки
Для работы со свободной версией Qt4 должен быть установлен компилятор MinGW (к сожалению, поддержка компилятора Microsoft C++ включена только в коммерческие версии Qt); путь к исполняемым файлам MinGW, находящимся в папке bin, должен быть указан в системной переменной PATH (напоминаем, что после редактирования значений переменных окружения требуется перезагрузить компьютер, чтобы все изменения вступили в силу).

Простейшее приложение Qt4
// Простейшее приложение Qt4 (пустое окно) 2 3 #include QApplication 4 #include QMainWindow 5 6 int main(int argc, char *argv[]) { 7 8 QApplication app(argc, argv); 9 10 QMainWindow *mw = new QMainWindow(0, Qt::Window); 11 mw-setWindowTitle("Hello Qt4"); 12 mw-resize(400, 300); 13 mw-show(); 14 15 return app.exec(); 16 }

Интегрированная среда разработки
Конечно, с исходным текстом программ можно работать, используя любой текстовый редактор, а компиляцию проводить с помощью командной строки. Но более удобно (во всяком случае, так считают те, кто мало знаком с миром Unix/Linux-систем) вести разработку программ в какой-нибудь интегрированной среде (IDE). В состав библиотеки Qt входит утилита QtDesigner, с помощью которой можно в диалоговом режиме вести проектирование графического интерфейса приложений.

Обработка событий
Для связывания событий, происходящий с объектами, и функций, предназначенных для обработки этих событий, в библиотеке Qt используется интересный механизм

Строка состояния
Строка состояния QStatusBar создаётся автоматически в нижней части главного окна приложения, если в программе хоть раз вызвается метод MainWindow::statusBar. При наведении указателя мыши на кнопку панели инструментов или пункт меню в строке состояния на время появляется текст подсказки, если этот текст определён для данной кнопки или данного пункта.

"Ручное" размещение
С помощью метода setGeometry(int x, int y, int w, int h) или setGeometry(const QRect) можно задать положение и размер любого визуального элемента в пикселах. Для установки размеров без изменения положения может использоваться метод resize(int w, int h) или resize(const QSize). Наоборот, для перемещения элемента в нужную позицию с сохранением прежних размеров служит метод move(int x, int y) или move(const QPoint).

Создание диалогов с помощью QtDesigner
Для разработки интерфейса программы в Qt имеется специальный инструмент-- QtDesigner. Он используется либо как самостоятельное приложение, либо как компонент, встроенный в интегрированную среду Microsoft Visual Studio. Во втором случае доступ к его функциям производится с помощью пункта меню

Работа с базами данных в Qt4
В библиотеке Qt4 имеются драйверы для работы со следующими СУБД: QDB2 -- IBM DB2 версии не ниже 7.1; QIBASE -- Borland InterBase; QMYSQL -- MySQL; QOCI -- Oracle; QODBC -- ODBC (в том числе Microsoft SQL Server); QPSQL -- PostgreSQL; QSQLITE -- SQLite версии не ниже 3; QSQLITE2 -- SQLite версии 2; QTDS -- Sybase Adaptive Server.

Подключение к базе данных и выполнение SQL-запросов
Для подключения к базе данных надо указать название SQL-драйвера, например: QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "MyDB1"); Второй необязательный параметр позволяет задать имя соединения.

Работа с таблицами баз данных
Самый простой способ отображения информации базы данных в виде таблицы заключается в использовании классов QSqlQueryModel и QTableView: QSqlQueryModel model; model.setQuery("select * from employee"); QTableView view; view.setModel(model); view.show();

Разработка модели и представления таблицы БД
Решим сначала простую задачу: в ячейках последнего столбца таблицы, где хранится только два возможных значения, будем отображать элемент QCheckBox и текст "Да" или "Нет" (). Кроме того, запретим редактирование первого столбца, изменим цвет фона ячеек первого и последнего столбцов, а также параметры шрифта во втором столбце.

Делегаты для ячеек таблицы
Делегаты -- это специальные классы, которые могут использоваться для управления режимами отображения или редактирования ячеек таблицы QTableView, равно как и элементов других представлений (QListView, QTreeView). В данном разделе мы определим делегатов для редактирования дат и чисел в ячейках таблицы.

Borland C++ Builder
Современные средства разработки информационных систем, к числу которых относится C++Builder, ориентированы на широкую поддержку различных СУБД, как настольных, так и серверных. Построение эффективных и надежных с точки зрения сохранности и защиты данных многопользовательских информационных систем, как правило, производится с использованием последних. Создание приложений в архитектуре клиент/сервер с помощью C++ Builder обладает рядом особенностей, отличающих их от приложений, использующих настольные СУБД.

C++ 3d.Комментарии
Хотелось бы отметить, что есть еще несколько очень важных мест, где мы имеем неожиданную и порой весьма существенную "поддержку времени выполнения". Это конструкторы/деструкторы (сложных) объектов, код создания/уничтожения массивов объектов, пролог/эпилог создающих объекты функций и, отчасти, вызовы виртуальных функций.

Справочник советов и примеров по C++Builder
Чтобы помигать иконкой приложения в панели задач, разместите на форме компонент TTimer (Timer1) и напишите следующий обработчик события OnTimer (предварительно выставив интервал таймера и сделав его активным):

Цветовые константы
Объект - это совокупность данных и способов работы с ними. Инкапсуляция - это механизм объединения и защиты данных и кода. Объект - это то, что поддерживает инкапсуляцию. Объединение кода и данных представляет собой "черный" ящик. Объект характеризуется свойствами. Свойства объекта - это данные, методы обращения с данными объекта, события, на которые объект может реагировать. Данные объекта представляются полями или записями. Внутри объекта коды и данные могут быть закрытыми (private) для этого объекта или от-крытыми (public).

Программирование для Windows на Borland C++
Чтобы ввести исходный текст программы, откомпилировать и увидеть на экране окно Windows-приложения, необходимо выполнить следующие действия: Сделайте двойной щелчок левой клавиши мыши (или нажатие ENTER) на пиктограмме Borland C++. Появится окно компилятора BC4. Щелчок левой клавиши мыши на элементе меню Project (или переход в строку меню путем нажатия F10, поиск и высвечивание элемента Project с помощью клавиш ¬ и ®. Раскрыть Project с помощью клавиши ENTER).

Создание VxD на Visual C++ без ассемблерных модулей
Виртуальные драйверы устройств (VxD) в Windows во многих случаях являются единственным «честным» способом обхода ограничений, установленных системой для приложений Win32: невозможности прямого доступа к портам ввода-вывода и служебной памяти, эффективной обработки аппаратных прерываний, использования сервисных функций существующих VxD и т.п. Кроме того, без VxD не обходится практически ни один полноценный драйвер физического или виртуального устройства.

Visual C++ FAQ
Клавиша Alt+Print Screen (не забывайте, что эффект распространяется только на текущее окно) С помощью MFC это делается командами GetDC(GetDesktopWindow), затем BitBlt куда надо. RTFM: BitBlt, CreateCompatibleDC, CreateCompatibleBitmap:

Настройка параметров доступа к данным в C++ Builder
Современные средства разработки информационных систем, к числу которых относится C++Builder, ориентированы на широкую поддержку различных СУБД, как настольных, так и серверных. Построение эффективных и надежных с точки зрения сохранности и защиты данных многопользовательских информационных систем, как правило, производится с использованием последних. Создание приложений в архитектуре клиент/сервер с помощью C++ Builder обладает рядом особенностей, отличающих их от приложений, использующих настольные СУБД.

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

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

Программирование на С++ с помощью компилятора Borland C++ 5.02 и библиотеки OWL 5.00
Для Windows можно разрабатывать 16-ти и 32-разрядные приложения (программы). Можно разрабатывать как MS DOS, так и Windows-приложения. Приложение пишется на языке высокого уровня (С, С++, Pascal, Fortran и т.п.), после этого программа компилируется компилятором (компиляция - получение исполняемого файла с расширением exe или com). В настоящее время хорошим компилятором является компилятор фирмы Borland версии 5.02.

Создание заготовки программы
Конечным результатом этой главы будет простейшая программа, которая сама по себе почти ничего не умеет делать, но служит основой для создания наших следующих программ. К счастью, наша первая программа будет исключением из народной мудрости, приведенной в эпиграфе - поскольку мы ее создадим, лишь выбирая варианты, предложенные Borland-ом.

Кнопочки и сообщения
Выделим строку "2000app.rc" в проекте и дважды щелкнем на ней. Появится новое окно, которое называется редактором ресурсов. Развернем, нажав на плюс, пункт "DIALOG", и выделим единственный подпункт - "IDD_CLIENT (2000)" - см.2.2. (И вот тут я понял, что имя для нашей программы - 2000 - я выбрал не совсем удачно. То, что Вы видите в скобках - 2000 - это идентификационный номер ресурса "диалога" - и он никак не связан с выбранным нами именем программы.

Сообщения об ошибках и предупреждения
Удалим, например, первые кавычки во фразе "Вы нажали:". MessageBox(Вы нажали на кнопку\nСпасибо Вам за это!", Ага, текст изменил цвет и из синего стал красным. (Если вы читаете черно-белый вариант книги, то это превращение я Вам показать, конечно, не могу - смотрите на монитор). Не стану объяснять очевидное - красный цвет всегда означает что-то плохое. Таким незамысловатым образом Borland, следящий за каждым Вашим движением, сразу сообщает Вам, что Вы делаете что-то не то.

Возвращаемые значения
MessageBox - это тоже функция. Мы ее вызываем, подсовывая (передавая) ей некоторые значения (тексты) и параметры-флаги. Эта функция рисует на экране окно сообщения. Когда мы нажимаем на кнопку в этом сообщении - именно в этот момент функция считается полностью выполненной - и возвращает вызвавшей ее программе какое-то значение. Что она может возвращать?

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

Работа с базами данных в Borland C++ Builder
Используя Borland C++ Builder, можно создать приложения, работающие как с однопользовательскими базами данных (БД), так и с серверными СУБД, такими как Oracle, Sybase, Informix, Interbase, MS SQL Server, DB2, а также с ODBC-источниками. Возможности C++ Builder, связанные с созданием приложений, использующих базы данных, весьма обширны для того, чтобы описать их в одной статье. Поэтому сегодня мы рассмотрим лишь простейшие возможности работы с таблицами баз данных.

Краткий курс по rmDC++
Придумайте себе прикольный ник, ведь у вас есть голова, она ведь не только что бы шапку носить и пиво туды заливать. Только помните некоторые хабы вас не пустят если ваш ник будет содержать русские буквы.

Сишные трюки от мыщъха
Мыщъх продолжает делиться трюками и хитростями эффективного программирования на си. сегодня мы рассмотрим: строки, указатели, циклы, память и многое другие аспекты практического программирования, которые наверняка вызовут дикий "вой" у всех теоретиков от языка, но… они работают и это главное!

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

Поставка приложений, созданных с помощью С++ Builder
При окончательной сборке исполняемого файла (то есть непосредственно перед созданием дистрибутива) следует убрать из исполняемого файла отладочную информацию. Для этого следует из менеджера проектов вызвать диалоговую панель Project Options и нажать кнопку Release.