В C ++ возможно ли иметь определенную чисто виртуальную функцию? - PullRequest
6 голосов
/ 08 декабря 2008

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

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

Ответы [ 2 ]

9 голосов
/ 08 декабря 2008

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

9 голосов
/ 08 декабря 2008

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

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...