4450-1 (662813), страница 2
Текст из файла (страница 2)
};
// здесь есть два варианта и второй в том, чтобы объявить
// время года как typedef ЕВремяГода ТВремяГода;
// какой вариант выбрать - дело вкуса.
// я выбрал первый потому, что он позволяет запретить
// изменение времени года для созданного объекта.
typedef vector ВременаГода;
enum Фигура { никакая, стройная};
enum Цвет { никакой, зеленый};
class TФигурный
{
public:
// получение фигуры, зная времена года
const virtual Фигура Быть( ВременаГода& ) = 0;
// получение времени года, зная фигуру
const virtual ВременаГода Быть( Фигура) = 0;
};
class TЦветной
{
public:
// получение цвета, зная времена года
const virtual Цвет Быть( ВременаГода& ) = 0;
// получение времени года, зная Цвет
const virtual ВременаГода Быть( Цвет) = 0;
};
class ТЕлочка
: public TObject,
public ТФигурный,
public ТЦветной
{
public:
const virtual Фигура Быть( ВременаГода& );
const virtual ВременаГода Быть( Фигура);
const virtual Цвет Быть( ВременаГода& );
const virtual ВременаГода Быть( Цвет);
const ТЛес Родиться();
const ТЛес Рости();
ТЕлочка(); // конструктор вызывается, когда елочка родится
~ТЕлочка();
// деструктор вызывается не тогда, когда елочку срубят,
// а тогда, когда после Нового Года выбросят на помойку
// и бедный дворник должен будет ее сжечь, поскольку
// елки в контейнеры грузить нельзя ;)
};
// получили две функции Быть с одинаковым аргументом.
// подобные проблемы следует решать по правилам применяемого
// языка. В нашем случае придется поменять
// имена функций на менее читабельные.
В примере я хотел сначала писать на Object Pascal. Мысленно разговаривая с читателем, услышал шум и топот ног и выкрики с мест - "А почему не С++?". Подумал и согласился - пусть будет на C++. Конечно же, приведенная метода не есть абсолют. Как говорится, если победишь в бою с нарушением устава - молодец, творчески мыслишь, отбрасывая устаревшие догмы. Если проиграл соблюдая устав - негодяй, который не смог постичь вековые истины. Если данная метода кому поможет - то-то я порадуюсь... Мне лично иногда помогает, особенно когда голова уже ничего не соображает и приходится действовать на автопилоте. Или когда приходится разбираться в исходниках и отгадывать - что же автор хотел сказать. Осуществлять своего рода модный ныне реинжиниринг. Что интересно, потом на свежую голову просмотришь что понаписал и удивляешься своей прозорливости и вообще тому, что это работает.














