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