чисто виртуальные объявления в подклассах - PullRequest
2 голосов
/ 14 июля 2011

У меня есть пара интерфейсов c ++, таких как:

struct IThese {
virtual void doThesethings() = 0;
}

struct IThose : public IThese {
virtual void doThoseOtherThings() = 0;
}

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

Вопрос: нужно ли переопределить doThesethings в IThose?

если нет, что будет, если я это сделаю?Будет ли это тени IThese метод?

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Вы не необходимо переопределить doThesethings() в IThose.

Класс (или структура), который наследуется от IThese , должен реализовать doThesethings().

Класс (или структура), который наследуется от IThose , должен реализовывать как doThesethings(), так и 'doThoseOtherThings () `.

Чтобы ответить на ваш другой вопрос, если вы переопределите doThesethings() в IThose, разные компиляторы могут по-разному реагировать. Либо это не будет иметь никакого эффекта, потому что компилятор сочтет его избыточным, либо это будет ошибкой, потому что чисто виртуальный метод был объявлен дважды и был чисто виртуальным в обоих случаях.

1 голос
/ 14 июля 2011

В настоящее время class IThose является абстрактным классом **, и вам не нужно повторно определять doTheseThings() внутри него.Вы можете выбрать реализовать doTheseThings() внутри class IThose.

Если doThesethings() реализовано в class IThose, то это дочерний класс (который наследует IThose) может или не может реализовать это.Но они должны реализовать doThoseOtherThings(), если они не хотят быть абстрактными.

** абстрактный класс: содержит хотя бы один чистый virtual метод внутри него или через его базукласс

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