Категории: ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника |
HerCircle.DisplayCircle(); // рисование окружности.
Как объявлять функции класса? Определение методов во многом напоминает определение обычных функции. Небольшие функции-элементы можно определять внутри определения класса: Class Stock { private: int shares; double total_val; double share_val; … Void set() { total_val=shares*shares_val;} // определение метода Stock.set() … }; Более общий способ позволяет определять методы вне класса и даже в отдельном файле. Для этого используется оператор принадлежности (::) для идентификации класса. Заголовок метода в этом случае может выглядеть так: Void Stock::update(double price) Рассмотрим “действующий” пример использования класса[9] в программе, которая добавляет или снимает некоторые суммы с вклада: #include <iostream.h> #include <string.h> // для использования функции strncpy #include <stdlib.h> Class Stock { private: char company[30]; int shares; double share_val; double total_val; void set_tot() // встроенная функция {total_val=shares*share_val;} public: void acquare(const char * co,int n, double pr); void buy(int num, double price); void sell(int num, double price); void update(double price); void show(); }; // конец описания класса // начала определения методов класса void Stock::acquare(const char * co,int n, double pr) { strncpy(company,co,29); // стандартная функция strncpy "усекает" // при необходимости строку до 29 символов. company[29]='\0'; // конец строки shares=n; share_val=pr; set_tot(); // можно использовать встроенные функции класса. } Void Stock::buy(int num,double price) { shares+=num; share_val=num; set_tot(); } Void Stock::sell(int num,double price) { if (num>shares) { cerr<<"You can't sell more than you have! \n"; exit(1); } shares-=num; share_val=price; set_tot(); } Void Stock::update(double price) { share_val=price; set_tot(); } Void Stock::show() { cout<<"Company:"<<company <<"Shares: "<<shares<<'\n' <<"Share Prce: $"<<share_val <<"Total Worth:$"<<total_val<<'\n'; } Int main() { Stock stock1; // определение объекта stock1 класса Stock stock1.acquare("NanoSmart",20,12.50); stock1.show(); stock1.buy(15,18.25); stock1.show(); return 0; } Обратите внимание, что в приведенном листинге текст main() по размеру намного меньше собственно описания класса. И хотя главная программа здесь используется всего лишь как платформа для тестирования конструкции класса Stock, такое соотношение объемов в объектно-ориентированном программировании вполне обычно. Несколько замечаний к программе. Чтобы создать элемент класса (объект) используется имя класса, как если бы это было имя типа: Stock stock1; Метод класса может быть вызван только объектом класса, при этом используется точка: stock1.buy(15,18.25); Конструкторы и деструкторы классов. Одна из целей С++ ‑ сделать использование объектов класса таким же простым, как и использование стандартных типов. Для этого следует “научить” класс инициализировать объект данными. Для этого служит функция-конструктор. В приведенном выше примере описание конструктора может выглядеть так: Stock (const char * co, int n=0, double pr=0.0); // прототип функции Тем не менее, инициализировать объект Stock тем же способом, что и структуру не удастся.
Графика OpenGL. Для работы с графикой в программах, написанных под ОС Windows можно использовать несколько готовых библиотек. В нашем пособии мы обращаемся к библиотеке OpenGL-Open Graphics Library (открытая графическая библиотека). Термин "открытый" - означает независимый от производителей. Библиотеку OpenGL может производить кто угодно, главное, чтобы библиотека удовлетворяла спецификации OpenGL и ряду тестов. Стандарт OpenGL развивается с 1992 года фирмой Silicon Graphics. С тех пор библиотека завоевала огромную популярность и была интегрирована с множеством языков программирования и систем разработки приложений. Несомненными достоинствами OpenGL являются его простота и стандартность – программный код можно легко перенести на другую платформу или под другую операционную систему. Основное предназначение OpenGL - программирование трехмерной графики, хотя в нашем пособие мы ограничимся примерами использования только двумерных графических объектов средствами OpenGL. В составе операционной системы Windows OpenGL поставляется в виде двух DLL -файлов - opengl32.dll и glu32.dll. Для облегчения использования графических примитивов OpenGL в нашем курсе используется заголовочный файл xgl.h, написанный С.А. Юзвовичем. Для подключения библиотек OpenGL, необходимо настроить проект. Пользователям Microsoft Visual C++ 6.0 следует зайти в настройки проекта, пункты меню Project->Settings (или сочетание клавиш Alt+F7).
На закладке Link в графе Object/library modulesуказать несколько “линкуемых” (т.е. подключаемых на стадии редактирования) библиотек через пробел: opengl32.lib glu32.lib glaux.lib(данные библиотеки входят в состав Visual C++). После этого можно непосредственно приступать к написанию программы. Создадим новый исходный файл и добавим в него следующий текст:
#include "xgl.h" // подключаем заголовочный файл для работы с библиотекой OpenGL.
// Функция рисования. Void CALLBACK Draw() { glColor3f(1.0f, 1.0f, 1.0f); //цвет рисования xglDrawRect(10, 10, 100, 100); //рисуем квадрат }
// Главная функция Void main() { if( !xglInitWindow(0, 0, 300, 300, "Test XGL") ) //создаем окно вывода графики { auxQuit(); //выход в случаи неудачи } glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // цвет заливки окна xglMainLoop(Draw); //запускаем цикл обработки сообщений } Выше приведенная программа cоздает окно для вывода графики, заливает его черным цветом и рисует на нем белый квадрат.
Для работы с графикой используется функция Draw. Функция Draw объявлена как CALLBACK (возвращаемая). Это специальный тип функций, который используется для вывода изображений в окно Windows. Данная функция вызывается всякий раз, когда необходимо перерисовать данные в области окна. В этой функции мы определяем что и как должно рисоваться. Причем в внутри функции не рекомендуется использовать какие-либо сложные и длительные вычисления, так как это будет сказываться на скорости рисования ( эта функция может вызываться достаточно часто). Если нужно провести какие-то трудоемкие вычисления то их следует произвести заранее, например, в функции main().Если необходимо передавать какие либо данные в функцию Draw, то это можно делать через глобальные переменные. После этого описываем функцию void main(). В этой функции создается окно для вывода графики, задается цвет заливки и запускается цикл обработки сообщений для окна. Функция bool xglInitWindow(int x, int y, int sx, int sy, char* name) создает окно для вывода графики, принимает следующие параметры: · x, y – положение окна, · sx, sy – размеры окна, · name – название окна, выводится вверху на синей полоске. Функция void auxQuit()параметров не имеет и производит выход из программы. Вызывается в случаи если неудалось создать окно. Функцияvoid glClearColor(float red, float green, float blue, float alpha)задаетцвет заливки окна, принимает следующие параметры: · red – красная компонента цвета, в диапозоне от 0.0 до 1.0, · green – зеленая компонента цвета, в диапозоне от 0.0 до 1.0, · blue – синяя компонента цвета, в диапозоне от 0.0 до 1.0. · alpha– компонента прозрачности, в нашем случае всегда задается 1.0. Функция bool xglMainLoop(AUXMAINPROC pfDraw) запускает цикл обработки сообщений. В качестве параметра передается имя функции, которая будет вызываться при перерисовке окна: · pfDraw –указатель на функцию отрисовки окна (в нашем случае это функция Draw). Для рисования можно использовать следующие функции, вызываемые внутри функции Draw() : · glColor3f(float red, float green, float blue) –устанавливает цвет рисования. · xglDrawLine(Float x1, Float y1, Float x2, Float y2) –рисует линию · xglDrawPoint(Float x, Float y)– рисует точку · xglDrawTriangle(Float x1, Float y1, Float x2, Float y2, Float x3, Float y3)– рисует треугольник · xglDrawRect(Float x1, Float y1, Float x2, Float y2)– рисуетпрямоугольник. · xglDrawQuad(Float x1, Float y1, Float x2, Float y2, Float x3, Float y3, Float x4, Float y4) - четырехугольник.
Следует учитывать, что начало системы отсчета находится в левом нижнем углу окна.
|
|
Последнее изменение этой страницы: 2016-07-22 lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда... |