C ++ 0x предлагает атрибут для этого (см. Ответ Витау), и, например, Visual C ++ предлагает расширение языка.
Но в портативном C ++ 98 лучшее, что вы можете сделать, - это проверка работоспособности, что базовый класс предлагает доступную функцию-член, которая принимает те же аргументы, как ...
// The following macro is mainly comment-like, but performs such checking as it can.
#define IS_OVERRIDE_OF( memberSpec, args ) \
suppressUnusedWarning( sizeof( (memberSpec args, 0) ) )
, где
template< typename T >
inline void suppressUnusedWarning( T const& ) {}
Вы вызываете макрос в своей реализации переопределения с фактическими аргументами функции.
РЕДАКТИРОВАТЬ Добавлен пример вызова (отказ от ответственности: не тронут руками компилятора):
class BaseClass
{
protected:
virtual void MethodToOverride() const
{
DoSomething();
}
};
class DerivedClass : public BaseClass
{
protected:
void MethodToOverride() const
{
IS_OVERRIDE_OF( BaseClass::MethodToOverride, () );
DoSomethingElse();
}
};
Использование такой проверки работоспособности может улучшить четкость кода в определенных случаях и может спасти вашу задницу в определенных случаях. Это имеет три стоимости. (1) Кто-то еще может принять это за гарантию, а не за информативный комментарий и частичную проверку. (2) функция-член не может быть закрытой в базовом классе, как в вашем примере (хотя это, возможно, положительно). (3) Некоторые люди инстинктивно негативно реагируют на любое использование макросов (они просто запомнили правило о вреде, не понимая его).
Приветствия & hth.,