Сравнительное объектно-ориентированное проектирование - 29 стр.

UptoLike

Составители: 

29
public и protected, приобрели бы в наследнике модификатор
protected.
В описании
typedef bool __fastcall(__closure *OnMoveEvent)(TSprite* ,TPoint&);
именем описываемого типа является OnMoveEvent. Сам тип является
методом класса с двумя параметрами типа
TSprite* и TPoint&, который
возвращает тип
bool. То, что OnMoveEvent именно метод класса, а не
просто функция, отмечено модификатором
__closure. Тип TPoint
является стандартным и описан в библиотеке C++Builder. Знак
& служит
для описания «параметра по ссылке» – аналог служебного слова
var в
Delphi.
Модификаторы доступа к членам класса в C имеют слегка иной смысл,
нежели в Delphi. Все члены с модификатором
private доступны только
методам этого же класса вне зависимости от того, в каком модуле класс
описан. Члены класса с модификатором
protectedтолько методам
своего класса и классов-наследников. В Delphi члены с модификаторами
private и protected доступны всему коду того модуля, в котором
описан класс. Однако в C++ существует способ сделать доступными
защищенные (
private и protected) члены класса другому классу. Для
этого класс, методам которого разрешается доступ к защищенным
членам, описывается как
friend. Примером является декларация из
описываемого кода
friend class TSpriteList. Она говорит, что классу
TSpriteList разрешается доступ ко всем без исключения членам класса
TSprite.
Обратите внимание на синтаксис описания абстрактного метода в C++
void __fastcall virtual PaintPicture()=0;
Реализация классов спрайтов
Ниже приведен полный код реализации классов спрайтов, описанных в хэдере.
Комментарий к коду приводится непосредственно в тексте кода.
#include <vcl.h> //Модуль, несущий определения библиотеки VCL
/*Директива #pragma hdrstop означает окончание списка хэдеров,
компилируемых предварительно для использования в нескольких
файлах-исходниках одного проекта. В данном случае в этом списке
есть только файл vcl.h.
Директива #pragma hdrstop автоматически добавляется средой.*/
#pragma hdrstop
#include "uSprite.h" //хэдер нашего исходника
/*Директива #pragma package(smart_init) служит для «разумной»
последовательности в инициализации модулей при формировании
кода проекта. Она
также автоматически добавляется средой
при создании нового модуля.*/
#pragma package(smart_init)