Главная

Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






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

headinsider.info. Все права принадлежат авторам данных материалов.