Самая важная задача в примере — реализовать класс HotelBroker, который является производным от класса Broker (Брокер). Код этого класса находится в файле hotel-broker.h.
public _gc class HotelBroker : public Broker
// класс сборщика мусора - HotelBroker: общедоступный Брокер
{
private: // частный
// статические константы;
static const int MAXDAY = 366;
static const int MAXUNIT = 10;
static const int MAXCITY = 5;
static private int nextCity = 0; // статическая частная
String *cities[];
public:
HotelBroker() : Broker(MAXDAY, MAXUNIT) // Брокер
{
cities = new String*[MAXCITY]; // города
AddHoteK"Atlanta", "Dixie", 100, 115.00); //Атланта,
// Дикси
AddHotel("Atlanta", "Marriott", 500, 70.00); // Атланта,
// Мариот
AddHotel("Boston", "Sheraton", 250, 95.00); // Бостон,
// Шератон
}
};
Для описания массивов вводятся константы, и создается массив, содержащий названия городов. Конструктор определяет массивы с помощью конструктора базового класса, инициализирует массив cities (города) и добавляет несколько гостиниц для тестирования.
Потом определяется свойство NumberCity и метод добавления гостиницы в список гостиниц.
_property int get_NumberCity()
{
return nextCity;
}
String *AddHotel(
String *city,
String *name,
int number, // число
Decimal cost) // Десятичная стоимость
{
if (Findldfcity, name) != -1)
// если (Findld (город, название)! =-1)
return "Hotel is already on the list";
// "Гостиница уже находится в списке";
Hotel *hotel = // Гостиница
new Hotel(city, name, number, cost);
// новая Гостиница (город, название, число, стоимость);
AddUnit(hotel); // гостиница
AddCity(city); // город
return "OK";
}
Частные вспомогательные функции помогают найти идентификатор гостиницы и добавить город в список. Город можно добавить только тогда, когда его в списке еще нет: список не может содержать два одинаковых города.
int Findld(String *city, String *name)
{
for (int i = 0; i < NumberUnits; i++)
{
Hotel *hotel = dynamic_cast<Hotel *>(units[i]);
// Гостиница
if ((String::Compare(hotel->City, city) == 0)
// сравнить (гостиница-> Город, город)
&& (String::Compare(
// сравнить (гостиница-> HotelName, название)
hotel->HotelName, name) == 0))
return hotel->Hotel!d; // гостиница
}
return -1;
}
void AddCity(String *city)
{
// проверить, есть ли город уже в списке, добавить, если нет