Переопределение чисто виртуальных функций таким образом, что производный класс не является абстрактным - PullRequest
0 голосов
/ 18 апреля 2020

Предположим, у меня есть абстрактный базовый класс

class base
{
public:
virtual void function() = 0;
};

, за которым следует производный класс

class derived_1 : public base
{
public:
... function() ...;
};

Как я могу перегрузить вышеуказанную функцию, если я не хочу, чтобы она была определена, но Я sh, чтобы производное_1 не было абстрактным, поэтому я могу создать его экземпляр?

Затем за этими классами следует другой класс

class derived_2 : public base, public derived_1
{
public:
void function()
{
// What my function does
}

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

Кто-нибудь знает, как я могу это сделать?

Большое спасибо!

1 Ответ

3 голосов
/ 18 апреля 2020

Определение функции как чисто виртуальной означает, что она должна быть реализована подклассами, чтобы они не были абстрактными. Здесь не так много информации о вашей программе, но если вам нужно сделать что-то подобное, возможно, вам следует подумать об изменении структуры вашей программы. Тот факт, что вы определяете функцию как чисто виртуальную и не нуждаетесь в ней в производном классе, который должен быть конкретным, означает, что программа не разработана должным образом. В любом случае, если вы все равно хотите создать экземпляр из derived_1, вы можете просто предоставить пустую реализацию для function(), и это должно сработать. Но я предполагаю, что вам, вероятно, нужно больше, чем один интерфейс. Пусть base не имеет функции function, вместо этого определите ее в другом интерфейсе, и пусть derived_2 наследуется от derived_1, а также реализует интерфейс, содержащий функцию function.

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