Файл: Методические указания к курсовому проектированию по дисциплине Методы программирования и прикладные алгоритмы для студентов специальности 075400.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 44

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Свойства класса:

  • могут быть описаны с атрибутом доступа public, protected или private;

  • могут быть описаны как static; статические члены класса не копируются при создании объ­екта, а остаются в единственном экземпляре для всех объ­ектов класса; статические члены класса должны определяться где-либо в программе, но не в рамках описания класса, и к ним можно об­ращаться не только через объекты, но и через имена клас­сов:

имя_класса:: static_член_класса;

  • могут быть описаны как const; члены класса, которые описываются как const, могут быть инициализированы только один раз и после этого больше не могут быть изменены (следовательно, они должны ини­циализироваться конструктором);

  • описание класса заканчивается точкой с запятой.

Классы, описываемые в рамках определения какой-либо функ­ции, называются локальными.

Внутри класса разрешается определять типы, следовательно, один класс может быть описан внутри другого.
Методы класса
Методы класса:

  • имеют доступ ко всем свойствам класса;

  • представляют единственную возможность доступа к private-свойствам своего класса;

  • могут быть описаны как public, protected или private;

  • могут быть описаны как static;

  • могут быть описаны как const; методы класса, описанные как const, не могут изменять значения свойств и могут возвращать указатель или ссылку только на свойства класса, описанные как const. Они являются единственными методами класса, кото­рые могут вызываться для свойства-константы;

  • методы могут быть определены как внутри класса, так и за его рамками.


Атрибуты доступа

Атрибуты доступа public, private и protected регулируют воз­можность доступа к членам класса изнутри или извне класса (табл.1). Сле­довательно, они являются важным инструментом инкапсуляции. Прежде всего, с помощью этих атрибутов доступ к отдельным членам класса может быть ограничен.

Таблица 1

Атрибуты доступа к членам класса


Атрибут доступа

Значение

public

Член класса может использоваться любым методом, который является членом данного или производного класса. Доступ извне осуществляется через имя объекта и оператор расширения области видимости:

имя_о6ъекта.имя_члена_класса

ссылка_на_объект.имя_члена_класса

указатель_на_объект->имя_члена_класса

private

Член класса может использоваться только методами данного класса и функциями-«друзьями» того класса, в котором он описан

protected

To же, что и private. Но дополнительно член класса с данным атрибутом доступа может использоваться методами и функциями-«друзьями» классов, производных от описанного класса. Если нет производных классов, то private и protected идентичны.


Специальные методы класса

Конструктор выделяет память для объекта класса и инициализи­рует данные-члены класса. Он вызывается автоматически для каждого объекта. Для того чтобы каждый класс имел в своем рас­поряжении конструктор, компилятор классов, кроме явно объяв­ленного конструктора, предоставляет конструктор по умолчанию. Создание объекта регулируется путем описания одного или не­скольких собственных конструкторов.

Для конструкторов существует несколько важных правил:

  • Имя конструктора совпадает с именем его класса;

  • Конструктор не имеет никакого возвращаемого значения (даже void);

  • Классу без конструктора предоставляется конструктор по умолчанию;

  • Если конструктор описан явно, то конструктор по умолчанию не генерируется;

  • Конструкторы могут быть перегружены;

  • Перегрузка чаще всего используется для передачи кон­структору аргументов, предназначенных для инициализа­ции данных-членов класса;

  • Конструкторы не наследуются.

Деструкторы вызываются автоматически, если объекты классов становятся недействительными (например, при выходе за об­ласть определения или при вызове оператора delete для указа­теля на объект класса). Деструктор уничтожает объект и освобож­дает зарезервированную память.

Для деструкторов действительны правила, аналогичные прави­лам для конструкторов:



  • Имя деструктора также совпадает с именем его класса, но предваряется символом «» (тильдой):

имя_класса()

  • Деструктор не имеет никакого возвращаемого значения (даже void);

  • Деструктор не может быть описан с ключевым словом static и const;

  • Если в классе деструктор явно не описан, то компилятор ге­нерирует деструктор по умолчанию;

  • Деструктор не наследуется;

  • Указатель на деструктор не может быть определен.

Деструкторы отличаются от конструкторов следующими особен­ностями:

  • Деструкторам не могут передаваться аргументы, следова­тельно: деструкторы могут переопределяться, но не перегружаться, деструкторы могут описываться как virtual, деструкторы классов, производных от базовых классов, имеющих виртуальные деструкторы, автоматически стано­вятся виртуальными;

  • Деструкторы могут вызываться явно;

  • Деструктор в некоторых случаях должен быть обязательно задан явно (например, если область памяти выделена с по­мощью оператора new).



Пример объявления класса.
Пример объявления класса СVideoRecorder:

class VideoRecorder

{

//свойства

char* producer;

int* resolution;

bool fast_shooting, longplay, two_canal;

public:

//методы

void turn_on()

{//операторы}

void play()

{//операторы}

void record()

{//операторы}

void play_on_fast_shooting()

{//операторы}

void turn_off()

{//операторы}

};

Имея, класс СVideoRecorder, создадим объект данного класса ту_rеcorder и обратимся к его функциям в программе:
СVideoRecorder mу_rеcorder; // создали объект

my_recorder.turn on(); // вызвали соответствующие функции

my_recorder.play_on_fast shooting();

my_recorder.turn_off();
2. Работа с графикой.
CDC – класс, содержащий методы рисования.

Например, создание объекта класса CDC:

СDС MyDC;

вызов методов созданного объекта:

MyDC.MoveTo(0,0);

MyDC.LineTo(10,10);
CClientDC( CWnd* pWnd ); – класс, наследующий методы класса CDC и инициализирующий окно для рисования pWnd, в котором будет выводиться вся графика, например, создание объекта класса CClientDC:

CWnd* pWnd = GetDlgItem(IDC_DIALOG);

CClientDC NewDC( pWnd );

NewDC.MoveTo(0,0);

NewDC.LineTo(10,10);

где метод CWnd* GetDlgItem( int nID );

возвращает указатель на окно элемента диалога с идентификатором:

nID = IDC_DIALOG;
COLORREF – тип возвращаемый макросом RGB(r,g,b), где r – красная, g –зеленая, b – синяя компонента от 0 до 255.

например: COLORREF с = RGB(255,0,0,); ­– светло-красный;

с = RGB(128,128,0,); ­– темно-желтый;
Функции вывода текста.

SetTextColor( RGB(255,0,0,) ); – устанавливает красный цвет текста.
virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );

или

BOOL TextOut( int x, int y, const CString& str );

Функция выводит в точку (x,y) текст из объекта класса CString или массива символов lpszString в количестве nCount символов.
[ СОЗДАТЬ ПЕРО ]

Объект перо служит для изображения линий и контуров графических элементов.

CPen ( int nPenStyle, int nWidth, COLORREF crColor );

nPenStyle – тип пера:

· PS_SOLID – сплошное

· PS_DASH – пунктирное (при толщине 1)

· PS_DOT – точечное (при толщине 1)

· PS_DASHDOT – тире-точка (при толщине 1)

· PS_DASHDOTDOT – тире-точка-точка (при толщине 1)

· PS_NULL – прозрачное перо

nWidth – ширина пера;

crColor – цвет пера.

Например:

CPen pen(PS_SOLID, 3, RGB(0,255,0) ); – сплошное зеленое перо толщиной 3 пиксела.
[ СОЗДАТЬ КИСТЬ ]

Объект кисть предназначен для закрашивания внутренней области в графических объектах.

CBrush( COLORREF crColor );

или

CBrush( int nIndex, COLORREF crColor );

crColor – цвет пера

nIndex – тип пера

· HS_BDIAGONAL \\\\\\\\\\

· HS_CROSS ++++++++++

· HS_DIAGCROSS XXXXXXXXXX

· HS_FDIAGONAL //////////

· HS_HORIZONTAL ----------

· HS_VERTICAL |||||||||||

например: CBrush brush(HS_CROSS, RGB(255,0,0) ); – красное перо "в клеточку".

Функция выбора созданного пера или кисти текущим.

CPen* SelectObject( CPen* pPen );

CBrush* SelectObject( CBrush* pBrush ); – выбирает ТЕКУЩЕЕ перо pPen или кисть pBrush соответственно.
[ ТОЧКА ]

CPoint – класс, содержащий структуру POINT, содержит переменные:

LONG x,y – координаты задаваемой точки.

LPPOINT – указатель на объект класса CPoint или структуру POINT. Пример инициализации объекта класса CPoint:

CPoint p;

p.x = 10;

p.y = 20;

LPPOINT pp = &p;
Функции с применением класса CPoint:

CPoint GetCurrentPosition(); возвращает точку, на которой установлено текущее перо.

CPoint MoveTo( int x, int y );

или

CPoint MoveTo( POINT point );

Функция перемещает перо в указанную точку и возвращает координаты предыдущей точки пера.
BOOL LineTo( int x, int y );

или

BOOL LineTo( POINT point );

Функция изображает линию текущим пером из текущей точки в указанную.
[ ПРЯМОУГОЛЬНИК ]

CRect – класс, содержащий структуру RECT, содержит переменные:

LONG left – левая координата прямоугольника;

LONG right – правая координата прямоугольника;

LONG top – верхняя координата прямоугольника;

LONG bottom – нижняя координата прямоугольника;

LPCRECT – указатель на объект класса CRect или структуру RECT.

Пример инициализации объекта класса CRect:

CRect r(1,1, 10,10);

или

CRect r();

r.SetRect(1,1, 10,10);

LPCRECT pr = &r;
[ ДУГА ]

BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );

или

BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );

Функция изображает текущим пером эллиптическую кривую внутри прямоугольника: lpRect или (x1,y1; x2,y2) от начальной точки ptStart; (x3,y3) до конечной точки ptEnd; (x4,y4).

BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle );

Функция изображает текущим пером эллиптическую кривую вокруг центральной точки (x,y) радиусом nRadius от угла fStartAngle до угла fSweepAngle, заданных в градусах относительно ординаты x
int SetArcDirection( int nArcDirection );

int GetArcDirection();

Соответственно задается и возвращается направление обрисовки дуги.

Параметр nArcDirection принимает значения:

· AD_COUNTERCLOCKWISE – против ч.с.

· AD_CLOCKWISE – по ч.с

[ ПОЛИЛИНИЯ ]

BOOL Polyline( LPPOINT lpPoints, int nCount );

Функция последовательно рисует текущим пером отрезки по точкам, заданным в массиве lpPoints, количеством nCount
[ Закрашенный прямоугольник ]

void FillRect( LPCRECT lpRect, CBrush* pBrush );

Функция закрашивает прямоугольник lpRect кистью pBrush.
void FrameRect( LPCRECT lpRect, CBrush* pBrush );

Функция закрашивает единичную рамку вокруг прямоугольника lpRect кистью pBrush.
BOOL Rectangle( int x1, int y1, int x2, int y2 );

или

BOOL Rectangle( LPCRECT lpRect );

Функция закрашивает текущей кистью прямоугольник lpRect или (x1,y1; x2,y2).
BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 )