Файл: Методические указания к курсовому проектированию по дисциплине Методы программирования и прикладные алгоритмы для студентов специальности 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 )