C ++ обеспечивает реализацию чисто виртуального метода из другой иерархии наследования - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть класс Parent и два класса Child:

class Parent
{
};

class Child1: public Parent
{
};

class Child2 : public Parent
{
};

Я бы хотел иерархию второго класса, с классом Cousin в верхней части иерархии и подклассами под названием Cousin1, Cousin2 etc:

class Cousin
{
    virtual void doUsefulWork() = 0;
};

class Cousin1 : public Cousin
{
    virtual void doUsefulWork() override
    {
        // One behaviour
    }
};

class Cousin2 : public Cousin
{
    virtual void doUsefulWork() override
    {
        // A different behaviour
    }
};

Каждый Child подкласс ДОЛЖЕН наследовать подкласс Cousin, чтобы иметь реализацию doUsefulWork():

class Child1 : public Parent, Cousin1
{
    // Has implementation of doUsefulWork() from Cousin1
};

Как я могу защититься от автора подкласса Child, забывшего наследовать подкласс Cousin? Я хотел бы что-то, что генерирует ошибку времени компиляции.

Каждый подкласс Child должен иметь доступ к реализации doUsefulWork().

Я думал о том, чтобы Cousin наследовать от Parent и определить чисто виртуальный doUsefulWork() в * 1030.*, но тогда я бы усложнил множественные проблемы наследования в Child подклассах?

1 Ответ

0 голосов
/ 28 ноября 2018

Как я могу защититься от автора подкласса Child, забывшего наследовать подкласс кузена?Я хотел бы что-то, что генерирует ошибку времени компиляции.

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

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