Например:
Файл заголовка базового класса имеет:
enum FOO
{
FOO_A,
FOO_B,
FOO_C,
FOO_USERSTART
};
Тогда производный класс имеет:
enum FOO
{
FOO_USERA=FOO_USERSTART
FOO_USERB,
FOO_USERC
};
Просто чтобы понять, как я использую это для того, чтобы иметь обработчик событий, где базовый класс имеет события, а затем производные классы могут добавлять события. Обработчик события производных классов будет проверять его события, а если событие не для него, то он передает событие в базовый класс.
class Base
{
public:
virtual void HandleFoo(FOO event);
};
class Derived: public Base
{
public:
void HandleFoo(FOO event);
};
void Base::HandleFoo(FOO event)
{
switch(event)
{
case FOO_A:
/* do stuff */
break;
case FOO_B:
/* do stuff */
break;
case FOO_B:
/* do stuff */
break;
}
}
void Derived::HandleFoo(FOO event)
{
switch(event)
{
case FOO_USERA:
/* do stuff */
break;
case FOO_USERB:
/* do stuff */
break;
case FOO_USERB:
/* do stuff */
break;
default:
/* not my event, must be for someone else */
Base::HandleFoo(event);
break;
}
}