2008-12-07 2 views
6

Вот сделка. У меня большая иерархия классов, и у меня есть этот метод, который расширяется до конца. Метод всегда должен рассматривать одну или две переменные на каждом новом уровне, и эта переменная зависит от фактического класса в иерархии. То, что я хочу сделать, это проверить эти две дополнительные переменные, а затем вызвать версию суперкласса той же функции. Я хочу, чтобы уметь определять эту функцию, поскольку все ее непосредственные дети будут ее использовать, но я хочу заставить всех детей этого класса переопределить этот метод (потому что им придется искать новые члены данных)В C++ возможно ли иметь определенную чисто виртуальную функцию?

Так как бы я это написал? Обычно я использую = 0; в файле .h, но я предполагаю, что не могу использовать это и определить его ...

ответ

9

На самом деле вы можете объявить функцию чисто виртуальной и по-прежнему определять реализацию для нее в базовом классе.

class Abstract { 
public: 
    virtual void pure_virtual(int x) = 0; 
}; 

void Abstract::pure_virtual(int x) { 
    // do something 
} 


class Child : public Abstract { 
    virtual void pure_virtual(int x); 
}; 

void Child::pure_virtual(int x) { 
    // do something with x 
    Abstract::pure_virtual(); 
} 
+0

Возможно, мой мозг слишком мал, но изменение сигнатуры pure_virtual в производном классе меня смутило. Что это иллюстрирует? – 2008-12-08 00:27:40

+0

onebyone хороший catch oO я не заметил. я подозреваю, что это опечатка? – 2008-12-08 00:33:27

9

Вы можете предоставить определение для чистой виртуальной функции. Проверьте GotW #31 для получения дополнительной информации.

Смежные вопросы