Есть ли способ «удалить» чисто виртуальную функцию? - PullRequest
5 голосов
/ 09 июня 2009

У меня есть абстрактный класс с парой чисто виртуальных функций, и один из классов, которые я извлекаю из него, не использует одну из чисто виртуальных функций:

class derivative: public base
{
public:
    int somevariable;
    void somefunction();
};

В любом случае, когда я пытаюсь его скомпилировать, я получаю сообщение об ошибке (по-видимому, класс все еще считается абстрактным, если он наследуется от абстрактного класса и не переопределяет все чисто виртуальные функции). В любом случае, кажется, что бессмысленно определять функцию

int purevirtfunc(){return 0;}

только потому, что это должно быть определено с технической точки зрения. Есть ли способ извлечь класс из абстрактного класса и не использовать одну из чисто виртуальных функций абстрактного класса?

Ответы [ 11 ]

0 голосов
/ 09 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...