Есть ли способ пометить (во время компиляции) «переопределенные» методы, сигнатуры которых не совпадают с базовой сигнатурой? - PullRequest
7 голосов
/ 08 октября 2010

По сути, мне нужна функциональность компилятора C # его ключевого слова override в моем коде C ++.

class Base
{
   virtual int foo(int) const;
};

class Derived : public Base
{
   virtual int foo(int); // wanted to override Base, but forgot to declare it const
};

Как мы все знаем, приведенный выше код прекрасно скомпилируется, но приводит к некоторому странному поведению во время выполнения.Я хотел бы, чтобы мой компилятор C ++ ловил мою плохую реализацию чем-то вроде ключевого слова C # override.Существуют ли какие-либо ключевые слова, такие как «переопределение», вводимые в C ++, или мы застряли с #define override virtual, чтобы показать наше намерение?(на самом деле я этого не делаю - я ненавижу использовать препроцессор для «расширения» языка).

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Насколько я знаю, это невозможно с текущим стандартом. Вы можете сделать это в следующем C ++ 0x. Подробнее см. Здесь: Явные переопределения виртуальных функций

1 голос
/ 08 октября 2010

Если вы не можете ждать C ++ 0x, Visual C ++ уже имеет это ключевое слово переопределения.(С 2005 года верю).Синтаксис:

virtual int foo(int) override;

Однако вы не обязаны его печатать.И это нестандартное расширение Microsoft.

...