Переопределение чисто виртуальных методов в C ++ - PullRequest
1 голос
/ 17 сентября 2010

Нужно ли объявлять методы, заменяющие чисто виртуальную функцию в базовом классе?Если так, то почему?Поскольку базовый класс объявил методы как чисто виртуальные, и, следовательно, ДОЛЖЕН существовать в производном классе, нет необходимости переопределять их в производном классе, прежде чем вы сможете реализовать их вне определения класса.Вы не согласны?

Ответы [ 3 ]

7 голосов
/ 17 сентября 2010

Да, у вас есть.

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

2 голосов
/ 17 сентября 2010

Вам не нужно переопределять объявление базового класса.Если вы этого не сделаете, то производный класс также просто абстрактный.

Итак, объявление в производном классе служит определенной цели, и вам это нужно.

1 голос
/ 17 сентября 2010

Определение класса, как следует из названия, является объявлением класса. Если вы не объявляете производную функцию (от чисто виртуальной), компилятор не найдет ее.

Вы должны получать чистые виртуальные функции, только если ваш класс будет создан. Вы можете иметь чисто виртуальную функцию класса A, класс B, который наследуется от класса A, но не имеет производных функций, а затем класс C, который наследует от класса B с повторной реализацией производной функции. В этом случае может быть создан только класс C, так почему компилятор должен добавить объявление производного класса в классе B? Вот почему вы должны указать компилятору, какой класс переопределяет чисто виртуальные функции.

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