Конструктор по умолчанию

Конструктор по умолчанию — это конструктор без параметров. Если он не задан явно и при этом не создано других конструкторов с параметрами, то конструктор по умолчанию создастся автоматически. При этом все свойства нового объекта не будут никак проинициализированы (получат «мусорные» значения из памяти).

Копирующий конструктор

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

Статические члены класса

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

Статические методы могут вызывать и использовать только другие статические методы и статические переменные. Из статического метода нельзя выполнять вызов не статического метода класса.

Статическую переменную можно рассматривать как аналог глобальной переменной, которая связана с конкретным классом.

Часто статические переменные называют переменными класса, а «не статические» переменные — переменными экземпляра. Для статических переменных могут использоваться указатели.

Указатель this

Указатель this — это константный указатель на текущий объект (т. е. на объект, к которому применяется вызываемый метод). Этот указатель существует всюду внутри класса, его не надо как-то явно объявлять, к нему можно обращаться внутри любого метода класса.

Предположим, что в классе у нас есть поле с именемf и есть метод, который к этому свойству должен обращаться, но в котором имеется локальная переменная с тем же именем f. Указательthis поможет одновременно использовать поле и локальную переменную: через указатель поле будет доступно как this->f.Пример:

ClassExample {

private:

float f; // Какое-то поле класса

public:

voidfunc(float f) {

this->f = f;

}

};

Данные у каждого объекта свои, а методы класса общие для всех объектов. Указатель thisпомогает, определить с данными какого объекта будет работать метод.

Разыменовав указатель this можно получить ссылку на объект.

Перегрузка операторов

ВС++ можно создавать методы со специальными именами вида: operator *, где * — это один из существующих операторов языка (например, +, -, /, *, = и т.д.).

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

Вызывать этот метод можно обращаясь к нему по указанному символу (в данном случае, *). При этом аргументом метода будет считаться объект стоящий справа от символа, а вызываться метод будет для объекта, стоящего слева от символа.

Так, например, удобно для объектов своего класса использовать символ + в качестве метода, складывающего объекты, вместо именованного метода (например, sum).

Перегрузка операторов, как и перегрузка функций в целом, реализует принцип полиморфизма.

Класс TShape

Отображает на поверхности формы (вернее, любого контейнерного компонента) простые фигуры - прямоугольник, круг, эллипс. Вот пример этих фигур с разными значениями свойства Shape:

Так как это графический компонент, то обводка, как обычно, определяется свойством Pen, а заливка - свойством Brush.

CобытияOnClick() у него нет, есть только OnDragProp,OnDragOver, OnEndDrag, OnMouseDown, OnMouseMove, OnMouseUp, OnStartDrag.

OnDragProp. Событие наступает в момент отпускания перетаскиваемого компонента над данным компонентом

Описание. Событие OnDragDrop наступает в момент отпускания перетаскиваемого компонента над данным компонентом. В обработчике события надо описать, что в этот момент должно произойти. Параметр Source соответствует перетаскиваемому объекту, а параметр Sender - объекту, над которым объект был отпущен. Параметры X и Y содержат координаты позиции курсора мыши над компонентом в системе координат клиентской области этого компонента.

OnDragOver. Событие относится ко времени, в течение которого пользователь перемещает перетаскиваемый объект над компонентом

Описание. Событие OnDragOver начинается в момент, когда перетаскиваемый объект пересек границу данного компонента и оказался внутри его контура. Заканчивается событие, когда объект, покидая компонент, пересек его границу. Обработчик события OnDragOver используется для того, чтобы дать сигнал о готовности компонента принять перетаскиваемый объект в случае, если пользователь отпустит его над данным компонентом. Если компонент готов принять объект, в обработчике надо задать значение параметра Accept, равное True. Впрочем, это значение по умолчанию равно True, так что его можно не задавать. Вообще в предельном случае обработчик может быть пустым, что будет означать готовность компонента принять любой объект. Но даже пустой обработчик нужен, так как иначе сообщения о приеме компонента приложение не получит.

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

Параметр Source определяет перетаскиваемый объект, параметр Sender - сам компонент, параметры X и Y - координаты точки эрана в пикселях. Параметр State типа TDragState определяет состояние перетаскиваемого объекта по отношению к другим объектам. Возможны следующие состояния:

dsDragEnter Курсор мыши входит в пределы компонента.

DsDragMove Курсор мыши перемещается в пределах компонента.

DsDragLeave Курсор мыши выходит за пределы компонента.

OnEndDrag.Событие наступает в момент прерывания или окончания перетаскивания компонента

Описание.СобытиеOnEndDrag наступает при любом окончании процесса перетаскивания компонента - успешном (компонент перетащен в приемник) или безуспешном (компонент отпущен над формой или компонентом, не способным его принять). Событие наступает в перетаскиваемом компоненте.

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

Параметр Sender - это сам объект перетаскивания. Параметр Target - это компонент-приемник, если объект был им принят, или null, ели перетаскивание закончилось неудачей. Параметры X и Y - координаты экрана в пикселях.

OnMouseDown.Событие наступает в момент нажатия пользователем клавиши мыши над компонентом

Имеется также парное к данному событие OnMouseUp, наступающее при отпускании нажатой кнопки мыши над объектом. Его определение использует тот же тип TMouseEvent:

propertyOnMouseUp: TMouseEvent;

Описание.Обработка событий OnMouseDown и OnMouseUp используется для операций, требуемых при нажатии и отпускании пользователем какой-нибудь кнопки мыши.

Если требуется различная обработка событий в зависимости от того, какая кнопка мыши нажата или какая нажата вспомогательная клавиша, можно анализировать параметры Button и Shift. Значения параметра Button определяют, какая кнопка мыши нажата: mbLeft - левая, mbRight - правая, mbMiddle - средняя. Параметр Shift представляет собой множество, содержащее помимо обозначения нажатой кнопки еще и обозначения нажатых одновременно с этим вспомогательных клавиш Shift, Alt, Ctrl (соответствуют элементам множества ssShift, ssAlt, ssCtrl). Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender - указатель на компонент, в котором произошло событие.

OnMouseMove.Событие наступает при перемещении курсора мыши над компонентом

Описание.Обработчик события OnMouseMove пишется, если надо произвести какие-то операции при перемещении курсора мыши над компонентом.

Параметр Shift, являющийся множеством, содержит элементы, позволяющие определить, какие кнопки мыши и какие вспомогательные клавиши (Shift, Ctrl и Alt) нажаты в этот момент. Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender - сам компонент.

Событие OnMouseMove возникает независимо от того, нажаты ли какие-то кнопки или клавиши. Правда, хотя это и не документировано в C++Bilder, при нажатой правой кнопке мыши это событие, почему-то, не наблюдается.

OnMouseUp.Событие наступает в момент нажатия пользователем клавиши мыши над компонентом

Имеется также парное к данному событие OnMouseUp, наступающее при отпускании нажатой кнопки мыши над объектом. Его определение использует тот же тип TMouseEvent:

propertyOnMouseUp: TMouseEvent;

Описание.Обработка событий OnMouseDown и OnMouseUp используется для операций, требуемых при нажатии и отпускании пользователем какой-нибудь кнопки мыши.

Если требуется различная обработка событий в зависимости от того, какая кнопка мыши нажата или какая нажата вспомогательная клавиша, можно анализировать параметры Button и Shift. Значения параметра Button определяют, какая кнопка мыши нажата: mbLeft - левая, mbRight - правая, mbMiddle - средняя. Параметр Shift представляет собой множество, содержащее помимо обозначения нажатой кнопки еще и обозначения нажатых одновременно с этим вспомогательных клавиш Shift, Alt, Ctrl (соответствуют элементам множества ssShift, ssAlt, ssCtrl). Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender - указатель на компонент, в котором произошло событие.

OnStartDrag.Событие наступает, когда пользователь начал процесс перетаскивания компонента

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

Обработчик события OnStartDrag позволяет описать какие-то специальные действия, необходимые при начале перетаскивания. Параметр Senderявляется тем компонентом, который должен перетаскиваться или который содержит объект будущего перетаскивания.

Переменная DragObject по умолчанию равняется NULL. Это означает, что переноситься будет сам компонент или его объект. При этом автоматически создается объект типа TDragControlObject, с которым C++Builder осуществляет весь процесс перетаскивания. Но обработчик может создавать и новый объект перетаскивания, в котором определен какой-нибудь особый вид курсора и т.п.

Проектная часть

Постановка задачи

Цель работы: Разработать программу в среде C++, прорисовывающую графический объект и реализующую возможность управляемого перемещения, с использованием основных средств ООП в соответствии с заданием.

Программа должна выполнять в общем три задачи:

1. Прорисовка объекта.

2. Перемещение объекта по экрану.

3. Взаимодействие объектов между собой.

Все полученные результаты отобразить на экране. 

Название игры: Жизнь

Правила игра: На игровой доске (поле размером 12:12) игроки начинают ходить, при каждом ходе все соседние фишки становятся такого же цвета, что и ходивший игрок. Выигрывает тот игрок, который имеет большее количество закрашенных фишек.

 

Взаимосвязь классов:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: